Verarbeiten Sie viele kleine Aufgaben und halten Sie die Benutzeroberfläche ansprechbar

Ich habe eine WPF-Anwendung, die einige kleine Aufgaben verarbeiten muss. Diese kleinen Aufgaben werden alle gleichzeitig generiert und der Dispatcher-Warteschlange mit der Priorität Normal hinzugefügt. Gleichzeitig wird eine Besetztanzeige angezeigt. Das Ergebnis ist, dass die Besetztanzeige tatsächlich einfriert, obwohl die Arbeit in Aufgaben aufgeteilt wurde.

Ich habe versucht, die Priorität dieser Aufgaben auf "Hintergrund" zu ändern, um zu überprüfen, ob dies behoben wurde, aber die Besetztanzeige blieb stehen.

Ich habe den abonniertDispatcher.Hooks.OperationStarted Ereignis, um festzustellen, ob Renderaufträge während der Verarbeitung meiner Aufgaben aufgetreten sind, dies jedoch nicht.

Irgendwelche Ideen, was los ist?

Einige technische Details: Die Aufgaben sind eigentlich nur Nachrichten von einemObservable Sequenz, und sie werden durch einen Aufruf von ReactiveUIs in den Dispatcher "eingereiht"ObserveOn(RxApp.MainThreadScheduler) was gleichbedeutend sein sollte mitObserveOn(DispatcherScheduler). Der Arbeitsteil jeder dieser Aufgaben ist der Code, der über den ObserveOn-Aufruf abonniert wird, z.

IObservable<TaskMessage> incomingTasks;
incomingTasks.ObserveOn(RxApp.MainThreadScheduler).Subscribe(SomeMethodWhichDoesWork);

In diesem Beispiel würden "incomingTasks" in kurzer Folge mehr als 3000 Nachrichten erzeugen. Das ObserveOn leitet jeden Aufruf von "SomeMethodWhichDoesWork" an die Dispatcher-Warteschlange weiter, damit er später verarbeitet wird

Antworten auf die Frage(3)

Ihre Antwort auf die Frage