Ho un programma che ho eseguito e nel mezzo ottengo questo messaggio:strano messaggio sui thread in C#
Gestito Debug Assistant 'ContextSwitchDeadlock' ha rilevato un problema in 'C: \ Documents and Settings \ Lena G \ My Documents \ SchoolStuff \ Informazioni IR \ Home Work \ FianlProject \ finalProject \ finalProject \ bin \ Debug \ finalProject.vshost.exe '. Ulteriori informazioni: Il CLR non è stato in grado di passare dal contesto COM 0x3407968 al contesto COM 0x3407ad8 per 60 secondi. Il thread che possiede il contesto/l'appartamento di destinazione è più probabile che effettui un'attesa senza pompaggio o che elabori un'operazione molto lunga senza pompare messaggi di Windows. Generalmente, questa situazione ha un impatto negativo sulle prestazioni e può persino portare a un'applicazione non reattiva o all'utilizzo della memoria che si accumula continuamente nel tempo. Per evitare questo problema, tutti i thread a thread singolo apartment (STA) devono utilizzare i primitivi di attesa di pompaggio (come CoWaitForMultipleHandles) e pompare regolarmente i messaggi durante le operazioni a esecuzione prolungata.
Capisco che ha qualcosa a che fare con il fatto che funziona per 60 secondi senza fermarsi o qualcosa del genere? Come è un problema? Ho anche messo [STAThread] prima che il principale del mio programma perché se tolgo poi mi mostra questo messaggio:
un'eccezione non gestita di tipo 'System.Threading.ThreadStateException' si è verificato in System.Windows.Forms.dll Ulteriori informazioni: Il thread corrente deve essere impostato sulla modalità apartment a thread singolo (STA) prima che sia possibile effettuare chiamate OLE. Assicurati che la tua funzione principale abbia STAThreadAttribute segnato su di essa. Questa eccezione viene sollevata solo se un debugger è collegato al processo.
Qualcuno sa come posso risolvere questo problema?
Grazie in anticipo,
Lena
Se si disattiva il deadlock dell'interruttore di contesto, si può fare del male? Sto usando Visual Studio 2008 .. –
Niente sta per esplodere. Potresti effettivamente avere un punto morto. Lo scoprirai abbastanza veloce, il tuo programma si bloccherà. –