110,538
社区成员
发帖
与我相关
我的任务
分享
//方法一:当前线程调度器
Task.Factory.StartNew(() =>
{
this.label1.Text = "方法一";
}, CancellationToken.None, TaskCreationOptions.None, TaskScheduler.FromCurrentSynchronizationContext());
//方法二:利用await进行上下文切换;
this.label1.Text= await Task<string>.Run(() => "方法二"); //把复杂计算丢到default,await会进行上下文切换;
//方法三:手动显式切换上下文
Task<string>.Run(() => "方法三").ContinueWith(p => { this.label1.Text = p.Result; },
/ TaskScheduler.FromCurrentSynchronizationContext());
//方法四:直接跨越使用上下文同步
SynchronizationContext uiContext=SynchronizationContext.Current;
Task.Run(() =>
{
uiContext.Post(state =>
{
this.label1.Text = "方法四";
},null);
});
//方法五:invoke,begininvoke 这个我就不写了,楼上说的很多了