2010-12-28 17 views
1

Ich habe eine problem- in meinem Programm, nach menuitem i Leere etwas verwenden klicken:C# nicht ein Ereignis

private void aToolStripMenuItem_Click(object sender, EventArgs e) 
    { 
     something(sender, e); 
    } 

Diese Funktion läuft lange, so dass meine Anwendung nichts anderes in dieser Zeit tun kann. Was kann ich tun?

Aber wenn ich folderBrowserDialog in Funktion etwas verwende und ich benutze selectedpath davon in einer anderen Funktion?

Antwort

7

Verwenden Sie eine Komponente BackgroundWorker.

+1

+1. Sie möchten es in einem separaten Thread ausführen, damit die Benutzeroberfläche weiterhin auf Benutzerereignisse reagieren kann, ohne lange Zeit "gesperrt" zu sein. – CodingWithSpike

2

Sie sollten wahrscheinlich Threading in C# die BackgroundWorker

Abgesehen von MSND Joseph Albahari ist zu wissen zu bekommen, ist eine hervorragende Ressource

1

Das Problem ist, dass der Code, der ‚etwas‘ ist auf dem UI-Thread ausgeführt wird, die ist verantwortlich für die Verarbeitung von Zeichnungen, Mausklicks usw. Wenn Sie möchten, dass die Benutzeroberfläche reagiert, während Ihr Programm "etwas" verarbeitet, müssen Sie dies in einem anderen Thread tun. (Damit der UI-Thread seine Arbeit erledigen kann.)

BackgroundWorker ist ein guter Weg, um dieses Problem zu lösen. Ich würde empfehlen: ThreadPool.QueueUserWorkItem