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
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
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.
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:
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#
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.
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/
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.
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