关于Task 的问题

spmzfz 2017-03-20 05:55:05


Task t = new Task(() =>
{
for (int i = 0; i < 10; i++)
{
this.textBox2.Invoke(new Action (() => { this.textBox2.Text = i.ToString(); })); //True
System.Threading.Thread.Sleep(500);
Application.DoEvents();
}
});

//t.RunSynchronously();
t.Start();

//t.Wait();
Console.WriteLine("Status:" + t.Status);

假如我不想使用“t.RunSynchronously();”这行语句,同时我想达到 在“Console.WriteLine("Status:" + t.Status);”之前让Task完成操作。如果我不使用“ t.Wait();”的话,我可看到数字在textBox2.Text 中的动态显示,虽然Task还没执行完成操作就执行了Colsole.write().但我我加入“t.Wait();”的话,就感觉程序“呆”了一样。这是为什么呢?
...全文
160 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Poopaye 2017-03-21
  • 打赏
  • 举报
回复
            Task t = new Task(() =>
            {
                for (int i = 0; i < 10; i++)
                {
                    this.textBox2.Invoke(new Action (()  => { this.textBox2.Text = i.ToString(); }));  //True
                    System.Threading.Thread.Sleep(500);
                    Application.DoEvents();
                    Console.WriteLine("Status:" + t.Status);
                }
            });

            t.Start();
spmzfz 2017-03-20
  • 打赏
  • 举报
回复
引用 2 楼 shingoscar 的回复:
UI是靠主线程来刷新的 在主线程上等待 -----> UI不会刷新
那你能告诉我在这里该怎么编程吗?
Poopaye 2017-03-20
  • 打赏
  • 举报
回复
UI是靠主线程来刷新的 在主线程上等待 -----> UI不会刷新
  • 打赏
  • 举报
回复
t.Wait()代表你在等待task执行结束,结束了才会执行Console.WriteLine 然后看你的需求,你可以t.ContinueWith来执行Console.WriteLine输出

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧