C# 任务线程id在调用对话框后更改
我正在尝试在等待后更新UI。在我在C# 任务线程id在调用对话框后更改,c#,winforms,task,C#,Winforms,Task,我正在尝试在等待后更新UI。在我在任务之前打开一个表单之前,它一直运行良好。延迟,然后我看到线程id已更改 有人能告诉我这里出了什么问题吗 private async void TestTaskThread() { this.Text += " : " + Thread.CurrentThread.ManagedThreadId.ToString(); Form2 form2 = new Form2(); form2.ShowDialog(); a
任务之前打开一个表单之前,它一直运行良好。延迟
,然后我看到线程id已更改
有人能告诉我这里出了什么问题吗
private async void TestTaskThread()
{
this.Text += " : " + Thread.CurrentThread.ManagedThreadId.ToString();
Form2 form2 = new Form2();
form2.ShowDialog();
await Task.Delay(7);
this.Text += " : " + Thread.CurrentThread.ManagedThreadId.ToString();
}
我无法复制它。我添加了一个按钮并单击调用
testtaskshread
方法。线程Id保持为1
private async void btnShowDialogFromAsync_Click(object sender, EventArgs e)
{
await TestTaskThread();
}
我还将方法的返回值更改为Task
复制它的唯一方法是将wait
配置为跳过恢复上下文
await Task.Delay(7).ConfigureAwait(false);
我无法复制它。我添加了一个按钮并单击调用
testtaskshread
方法。线程Id保持为1
private async void btnShowDialogFromAsync_Click(object sender, EventArgs e)
{
await TestTaskThread();
}
我还将方法的返回值更改为Task
复制它的唯一方法是将wait
配置为跳过恢复上下文
await Task.Delay(7).ConfigureAwait(false);
您唯一做错的事情就是希望相同的托管线程在
wait
之后重新启动。为什么会这样?@CodeCaster保存上下文是await
的标准行为,可以通过ConfigureAwait
进行配置。对于Windows窗体应用程序,上下文是UI线程。这里缺少的是调用TestTaskThread()
的方式/位置。您应该始终返回1
。如果在UI线程上调用TestTaskThread
,这将非常有效。我怀疑它没有在UI线程上被调用。你唯一做错的事情就是希望同一个托管线程在wait
之后被调用。为什么会这样?@CodeCaster保存上下文是await
的标准行为,可以通过ConfigureAwait
进行配置。对于Windows窗体应用程序,上下文是UI线程。这里缺少的是调用TestTaskThread()
的方式/位置。您应该始终返回1
。如果在UI线程上调用TestTaskThread
,这将非常有效。我怀疑它没有在UI线程上被调用。@在我的配置中没有。Windows 10、.NET Framework 4.7.2、C#7.3、Visual Studio 2017 15.9.11,无需调试即可启动(Ctrl+F5)@Yoav在我的配置中它不会。Windows 10、.NET Framework 4.7.2、C#7.3、Visual Studio 2017 15.9.11,无需调试即可启动(Ctrl+F5)