Schlaf-task (System.Threading.Aufgaben)

Brauche ich zum erstellen von thread-ersetzt Foto in Windows Forms Fenster, als wartet ~1s und die Wiederherstellung des vorherigen Foto.

Dachte ich, dass der folgende code:

TaskScheduler ui = TaskScheduler.FromCurrentSynchronizationContext();
var task = Task.Factory.StartNew(() =>
{
    pic.Image = Properties.Resources.NEXT;
    Thread.Sleep(1000);
    pic.Image = Properties.Resources.PREV;
}, CancellationToken.None, TaskCreationOptions.LongRunning, ui)

den job zu erledigen, aber leider nicht. Es friert die Haupt-UI-thread.

Das ist, weil es ist nicht garantiert, dass es nur einen thread pro Aufgabe. Ein thread kann genutzt werden für die Bearbeitung mehrerer Aufgaben.
Auch TaskCreationOptions.LongRunning option nicht helfen kann.

Wie ich es beheben kann?

  • Erstellen Sie die task scheduler durch die Verwendung FromCurrentSynchronizationContext(), die für WinForms wird der UI-thread. Also deine Aufgabe, schließlich läuft auf dem UI-thread, die Sie gehen dann zum schlafen gelegt. Don ' T setzen Sie den UI-thread schlafen. Je.
  • Ihre code-updates der UI direkt, so muss es auf dem UI-thread. Ihr code schläft, also es läuft nicht auf dem UI-thread. Fazit: Dein code ist fehlerhaft. Fixieren Sie es durch das entfernen einer der beiden in Konflikt stehenden Anforderungen.
InformationsquelleAutor patryk.beza | 2012-04-10
Schreibe einen Kommentar