ManagedThreadId return 2 个线程的相同值

ManagedThreadId return same value for 2 threads

请考虑此代码:

textBox1.Text = "Enter Thread Current Thread ID Is : " + Thread.CurrentThread.ManagedThreadId.ToString();
int result = 0;
Task t = Task.Factory.StartNew(delegate
     {
        for (int i = 0; i < 5; i++)
        {
            result = result + i;
            System.Threading.Thread.Sleep(1000);
            this.Invoke((Action)(() => textBox1.Text += Environment.NewLine + result.ToString() + " Current Thread ID Is : " + Thread.CurrentThread.ManagedThreadId.ToString()));
        }
     },CancellationToken.None, TaskCreationOptions.None);

我得到了这个结果:

Enter Thread Current Thread ID Is : 10

0 Current Thread ID Is : 10

1 Current Thread ID Is : 10

3 Current Thread ID Is : 10

6 Current Thread ID Is : 10

10 Current Thread ID Is : 10

我 运行 此代码在 Windows 表格申请中。为什么 Thread.CurrentThread.ManagedThreadId return 相同的值 UI 线程和任务线程? Task 运行 中的代码是否在单独的线程中?

谢谢

当您执行 this.Invoke 时,您告诉它返回到 UI 线程。将 Thread.CurrentThread.ManagedThreadId 移到调用之外,您将看到与 UI 线程不同的 ID。

此外,如果您想保证在线程池线程上完成工作,请使用 Task.Run 或传递 StartNew TaskScheduler.Default,否则可以从 [=14] 调用代码=] 意外地 运行 在 UI 线程上。参见 StartNew is Dangerous