C# 任务线程id在调用对话框后更改

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

我正在尝试在等待后更新UI。在我在
任务之前打开一个表单之前,它一直运行良好。延迟
,然后我看到线程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)