我正在玩异步操作,我现在的目标非常简单。我只是想在大型计算开始时更新文本字段,我面临的问题是文本字段会更新,但只有在calculate()
返回时才会更新,即使方法{{1}立即调用:
computingMessage()
答案 0 :(得分:3)
请检查Task对象。
private void Button_Click(object sender, RoutedEventArgs e)
{
TextBoxOutput.Text = "calculating...";
Task.Factory
.StartNew(() => Calculate())
.ContinueWith(t =>
{
TextBoxOutput.Text = t.Result.ToString(CultureInfo.InvariantCulture);
}, TaskScheduler.FromCurrentSynchronizationContext());
}
private int Calculate()
{
Thread.Sleep(2000); //--similate working....
return Environment.TickCount ^ 43;
}
我希望它可以帮到你。
答案 1 :(得分:1)
虽然我同意@dbvega的精神。我不同意Task.Factory.StartNew
的用法。你也不应该使用Dispatcher.Invoke
。默认情况下,运行WPF时,Task.Factory.CurrentScheduler
将设置为WPF消息泵调度程序。运行WinForms时,会自动设置一个WinForm调度程序...
private async void Button_Click(object sender, RoutedEventArgs e)
{
TextBoxOutput.Text = "calculating...";
var result = await Task.Run(Calculate);
TextBoxOutput.Text = result.ToString(CultureInfo.InvariantCulture);
}
private int Calculate()
{
Thread.Sleep(2000); //--similate working....
return Environment.TickCount ^ 43;
}