Oppure

Loading
08/11/20 8:48
fosforo
Ciao

Uso una DLL per analizzare i metadati dei file audio nella mia collezione.
Dato che i file sono tanti ho creato un ciclo For Next che per ogni file lancia la DLL.
Chiaramente dovrei fare l'analisi un file alla volta.
Come posso capire che la DDL ha finito e continuare il ciclo For Next?

Grazie anticipatamente
aaa
08/11/20 18:02
fosforo
Postato originariamente da fosforo:

Ciao

Uso una DLL per analizzare i metadati dei file audio nella mia collezione.
Dato che i file sono tanti ho creato un ciclo For Next che per ogni file lancia la DLL.
Chiaramente dovrei fare l'analisi un file alla volta.
Come posso capire che la DDL ha finito e continuare il ciclo For Next?

Questo è il codice:

using MediaInfoLib;

for (int i = 0; i < dataGridView1.Rows.Count; i++)
MI.Open(pathMTX + dataGridView1.Rows[i].Cells[0].Value.ToString() + ".mp3";);
textBox1.Text = MI.Inform();


Grazie anticipatamente
aaa
08/11/20 21:07
Non vedo il problema... chiudi il file e tratta il prossimo. Non hai molto da fare.
09/11/20 8:49
fosforo
Ciao Nessuno

Innanzitutto grazie per l'aiuto.
Purtroppo non sono cosi avanti.
Non capisco cosa significa chiudi il file.

Il mio problema è che la DLL ci mette un certo tempo ad analizzare un file e nel frattempo
il ciclo For Next continua a lanciare i processi di analisi.
Dopo un pò il programma si blocca.

Pensavo ad un meccanismo che controlla lo stato della analisi e, se finita, passa al file successivo mettendo in pausa il ciclo For Next.
aaa
09/11/20 10:41
Carlo
Non conosco MediaInfoLib e come opera, qui ci sono degli esempi d'uso:
csharp.hotexamples.com/examples/MediaInfoLib/MediaInfo/-/…

Che tipo di metadati ti occorrono?
In win10 c'è Shell32.dll, che restituisce questi parametri contenuti in un file multimediale:
0: Nome
1: Dimensione
2: Tipo elemento
3: Ultima modifica
4: Data creazione
5: Data ultimo accesso
6: Attributi
7: Stato offline
8: Disponibilità
9: Tipo percepito
10: Proprietario
11: Tipologia
12: Data acquisizione
13: Artisti partecipanti
14: Album
15: Anno
16: Genere
17: Conduttori
18: Tag
19: Classificazione
20: Autori
21: Titolo
22: Oggetto
23: Categorie
24: Commenti
25: Copyright
26: #
27: Durata
28: Velocità in bit
29: Protetto
30: Modello fotocamera
31: Dimensioni
32: Produttore fotocamera
33: Società
34: Descrizione del file
35: Master parole chiave
36: Master parole chiave
37: 
38: 
39: 
40: 
41: 
42: Nome programma
43: Durata calendario
44: È online
45: È ricorrente
46: Ubicazione
47: Indirizzi partecipanti facoltativi
48: Partecipanti facoltativi
49: Indirizzo organizzatore
50: Nome organizzatore
51: Ora promemoria
52: Indirizzi partecipanti obbligatori
53: Partecipanti necessari
54: Risorse
55: Stato riunione
56: Stato disponibilità
57: Dimensioni totali
58: Nome account
59: 
60: Stato attività
61: Computer
62: Anniversario
63: Nome assistente
64: Telefono assistente
65: Compleanno
66: Indirizzo (ufficio)
67: Città (uff.)
68: Paese/area geografica (uff.)
69: Casella postale (uff.)
70: CAP (uff.)
71: Provincia o stato società
72: Via (uff.)
73: Fax (uff.)
74: Home page società
75: Telefono (uff.)
76: Numero richiamata automatica
77: Telefono automobile
78: Figli
79: Telefono principale società
80: Reparto
81: Indirizzo di posta elettronica
82: Posta el. 2
83: Posta el. 3
84: Elenco posta elettronica
85: Nome visualizzato posta elettronica
86: Archivia come
87: Nome
88: Nome e cognome
89: Sesso
90: Nome
91: Hobby
92: Indirizzo (abitazione)
93: Città (ab.)
94: Paese/area geografica (ab.)
95: Casella postale (ab.)
96: CAP (ab.)
97: Provincia (ab.)
98: Via (ab.)
99: Fax abitazione
100: Telefono (ab.)
101: Indirizzi IM
102: Iniziali
103: Posizione
104: Etichetta
105: Cognome
106: Indirizzo postale
107: Secondo nome
108: Numero di cellulare
109: Alternativo
110: Ufficio
111: Altri indirizzi
112: Altra città
113: Altro paese o altra area geografica
114: Altra casella postale
115: Altro CAP
116: Altra provincia
117: Altra via
118: Cercapersone
119: Titolo personale
120: Città
121: Paese/area geografica
122: Casella postale
123: CAP
124: Provincia
125: Indirizzo
126: Posta elettronica primaria
127: Telefono principale
128: Professione
129: Coniuge/Partner
130: Suffisso
131: Telefono TTY/TTD
132: Telex
133: Pagina Web
134: Stato contenuto
135: Tipo contenuto
136: Data trasferimento
137: Data di archiviazione
138: Terminato il
139: Categoria dispositivo
140: Connesso
141: Metodo individuazione
142: Nome descrittivo
143: Computer locale
144: Produttore
145: Modello
146: Associato
147: Classificazione
148: Stato
149: Stato
150: ID client
151: Collaboratori
152: Creazione contenuto
153: Data ultima stampa
154: Data ultimo salvataggio
155: Dipartimento
156: ID documento
157: Pagine
158: Diapositive
159: Tempo totale di modifica
160: Numero parole
161: Scadenza
162: Data di fine
163: Numero file
164: Estensione file
165: Nome file
166: Versione file
167: Colore contrassegno
168: Stato contrassegno
169: Spazio libero
170: 
171: 
172: Gruppo
173: Tipo di condivisione
174: Profondità in bit
175: Risoluzione orizzontale
176: Larghezza
177: Risoluzione verticale
178: Altezza
179: Priorità messaggio
180: È un allegato
181: È stato eliminato
182: Stato di crittografia
183: Con contrassegno
184: Completato
185: Incompleto
186: Stato lettura
187: Condiviso
188: Creatori
189: Data
190: Nome cartella
191: Percorso cartella
192: Cartella
193: Partecipanti
194: Percorso
195: Per percorso
196: Tipo
197: Nomi contatti
198: Tipo voce
199: Lingua
200: Data visita
201: Descrizione
202: Stato collegamento
203: Destinazione collegamento
204: URL
205: 
206: 
207: 
208: Elemento multimediale creato
209: Data di rilascio
210: Autore codifica
211: Numero episodio
212: Produttori
213: Editore
214: Numero stagione
215: Sottotitolo
216: URL Web utente
217: Scrittori
218: 
219: Allegati
220: Indirizzi Ccn
221: Ccn
222: Indirizzi Cc
223: Cc
224: ID conversazione
225: Data di ricezione
226: Data di invio
227: Indirizzi origine
228: Da
229: Con allegati
230: Indirizzo mittente
231: Mittente
232: Archivio
233: Indirizzi destinatari
234: Titolo azione
235: A
236: Mileage
237: Artista album
238: Criterio di ordinamento artista album
239: ID album
240: Criterio di ordinamento album
241: Criterio di ordinamento artisti partecipanti
242: Battute al minuto
243: Compositori
244: Criterio di ordinamento compositore
245: Disco
246: Chiave iniziale
247: Parte di una compilation
248: Umore
249: Serie
250: Punto
251: Colore
252: Classificazione per minori
253: Motivo classificazione per minori
254: Spazio utilizzato
255: Versione EXIF
256: Evento
257: Esposizione
258: Programma Esposizione
259: Tempo di esposizione
260: F-stop
261: Modalità flash
262: Distanza focale
263: lunghezza focale 35 mm
264: Sensibilità ISO
265: Produttore lenti
266: Modello lenti
267: Sorgente luminosa
268: Massima apertura
269: Modalità regolazione
270: Orientamento
271: Persone
272: Modalità programma
273: Saturazione
274: Distanza del soggetto
275: Bilanciam. bianco
276: Priorità
277: Progetto
278: Numero canale
279: Titolo puntata
280: Sottotitoli codificati
281: Riesegui
282: SAP
283: Data trasmissione
284: Descrizione programma
285: Tempo registrazione
286: Call sign stazione
287: Nome stazione
288: Riepilogo
289: Frammenti
290: Riepilogo automatico
291: Pertinenza
292: Proprietà del file
293: Precisione
294: Condiviso con
295: Stato condivisione
296: 
297: Nome prodotto
298: Versione
299: Collegamento di supporto
300: Origine
301: Data di inizio
302: Condivisione
303: Stato di disponibilità
304: Stato
305: Informazioni di pagamento
306: Completata
307: Proprietario attività
308: Criterio di ordinamento titolo
309: Dimensioni file totale
310: Marchi depositati
311: Compressione video
312: Amministrazione
313: Velocità dati
314: Altezza fotogramma
315: Frequenza dei fotogrammi
316: Larghezza fotogramma
317: Sferico
318: Stereo
319: Orientamento video
320: Velocità in bit complessiva

se l'interrogazione la metti in un ciclo for, il programma non va avanti finquando non ha restituito i parametri.
Shell32 l'ho usata qualche volta in VB.Net, se ritieni che ti può essere utile, nessun problema a postarti un esempio in C#
in programmazione tutto è permesso
09/11/20 11:21
Postato originariamente da fosforo:

Ciao Nessuno

Innanzitutto grazie per l'aiuto.
Purtroppo non sono cosi avanti.
Non capisco cosa significa chiudi il file.

Il mio problema è che la DLL ci mette un certo tempo ad analizzare un file e nel frattempo
il ciclo For Next continua a lanciare i processi di analisi.
Dopo un pò il programma si blocca.

Pensavo ad un meccanismo che controlla lo stato della analisi e, se finita, passa al file successivo mettendo in pausa il ciclo For Next.


Non ci siamo capiti.

Se hai usato la MI.Open ci sarà anche una MI.Close o qualcosa del genere.
Tutto il codice deve stare nella for ma non si capisce cosa hai inserito nella for perché non hai usato i tag CODE


09/11/20 16:03
Carlo
@ fosforo
Ho caricato un progetto che mostra l'uso di Shell32.dll:
pierotofy.it/pages/sorgenti/dettagli/19629-INFOfile=Shell32/
in programmazione tutto è permesso
09/11/20 17:47
fosforo
Nessuno ha ragione ma posto solo il codice necessario per non tediare.

for (int i = 0; i < dataGridView1.Rows.Count; i++)
{ lblProcessed.Text = "Processing: " + dataGridView1.Rows[i].Cells[0].Value.ToString();
progressBar1.Value = i + 1;
dataGridView1.Rows[i].Selected = true;
Media_Info Minfo = new Media_Info(pathMTX, dataGridView1.Rows[i].Cells[0].Value.ToString());
textBox1.Text = Minfo._RetMediaInfo;
this.Refresh();}

public Media_Info( string pathMTX, string FileName)
{ if (MI.Open(pathMTX + FileName + ".mp3";) > 0)
{ RetMediaInfo = MI.Inform();}
MI.Close();
}
public string _RetMediaInfo
{get { return RetMediaInfo; }
}

Ecco l'errore che mi restituisce dopo poche analisi:

Assistente al debug gestito 'ContextSwitchDeadlock' : 'CLR non è riuscito a passare dal contesto COM 0xff2c48 al contesto COM 0xff2b90 per 60 secondi. Probabilmente il thread a cui appartiene il contesto/apartment di destinazione è impegnato nell'attesa senza distribuzione o nell'elaborazione di un'operazione a esecuzione prolungata che non prevede la distribuzione di messaggi Windows. Questa situazione in genere ha un impatto negativo sulle prestazioni e può causare una mancata risposta dall'applicazione o un accumulo continuato nel tempo dell'utilizzo della memoria. Per evitare questo problema, è necessario che durante le operazioni a esecuzione prolungata tutti i thread di tipo apartment a thread singolo usino primitive di attesa con distribuzione (ad esempio CoWaitForMultipleHandles) e messaggi distribuiti in base a routine.'


Carlo grazie per l'indicazione, molto interessante, non sapevo neanche esistesse.
La proverò per vedere se riesce a leggere i file tipo DSD, FLAC and ALAC etc etc.
aaa