C# gemischte Verwendung von Aufgabe und Dispatcher.Aufrufen, warum es halte?
Habe ich versucht unten snippet:
public Task RunUiTask(Action action)
{
var task = Task.Factory.StartNew(() =>
{
Dispatcher.Invoke(DispatcherPriority.Background, action);
});
return task;
}
private void OnCreateTask(object sender, RoutedEventArgs e)
{
var task = RunUiTask(() =>
{
for(int i=0;i<10;i++)
{
ResultTextBlock.Text += i.ToString();
}
});
task.Wait(); //(a) Program stopped here
ResultTextBlock.Text += "Finished"; //(b) Never called;
}
Ich konnte nicht verstehen, warum, wenn OnCreateTask (eine Schaltfläche click-Ereignis-handler) aufgerufen wird, hält das Programm an (a) und (b) wird nie aufgerufen.
Hinweis: ich weiß, dass ich verwenden können, Dispatcher.BeginInvoke, um das Programm reagieren, aber das ist nicht mein Anliegen hier.
Kann jede Stelle sagen Sie, warum das Programm hält an (a) und weshalb (b) nie aufgerufen wird? Danke.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den Anruf von
ausgeführt wird
Action
in Ihre UI-Thread und zurück nachAction
ausgeführt wird.Das Problem ist, dass Ihre UI-Thead ist blockiert, weil der
task.Wait()
in IhremOnCreateTask
, so dass die Aktion nie ausgeführt werden und Sie haben ein Deadlock.BEARBEITEN
Statt Ihre
task.Wait()
sollten Sie eine Fortsetzung und AktualisierungResultTextBlock.Text