【问题标题】:C# windows forms - Getting same thread id for different threads [closed]C# windows 窗体 - 为不同线程获取相同的线程 ID [关闭]
【发布时间】:2014-04-24 19:37:30
【问题描述】:

我正在使用 C# windows 窗体应用程序。 我正在通过这段代码启动线程

            System.Threading.Thread thread = new System.Threading.Thread(() => ThreadFunctions.FirstThread(this));
        thread.Start();

main threadthread 怎么会有相同的 id 呢?

我正在通过此代码打印线程 ID。

label.Text = "Thread Main ID: " + System.Threading.Thread.CurrentThread.ManagedThreadId ;

我也开始了一些任务,并且得到了相同的 ID。

【问题讨论】:

  • 您无法从非 UI 线程修改 UI,因此您拥有的代码将抛出异常,或者您正在从其他线程编组到 UI。
  • 我错过了什么吗?您正在从主线程打印当前线程的 ID,对吗?所以当然和主线程一样...
  • 您应该提供所有代码以获得正确答案。
  • 我正在使用调用、委托来更改 UI 控件值。

标签: c# multithreading winforms


【解决方案1】:

如果线程具有相同的 ID,则它们是同一个线程。我的猜测是,由于代码出现在设置标签标题的代码中,它正在主线程上运行。你是在用Invoke把它放到主线程上,不是吗?

通过在线程中构建包含 ID 的字符串来处理该问题。那是在 UI 线程上调用的委托之外。

【讨论】:

  • 我认为你是对的,我正在通过调试器查看变量值int tmp1 = System.Threading.Thread.CurrentThread.ManagedThreadId; 它是不同的。但是在lable 中打印我正在获取主线程ID。如何打印辅助线程的正确 ID?
  • 就像我说的。读取线程中的 ID。在调用的委托中使用变量捕获。使用该变量捕获将 ID 的值传递给 UI 线程。
猜你喜欢
  • 2021-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-23
  • 2011-12-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多