【问题标题】:How to ensure that a code is running on main thread in vb.net?如何确保代码在 vb.net 的主线程上运行?
【发布时间】:2012-02-15 18:28:11
【问题描述】:

在目标 c 中很容易做到这一点,但我不知道如何在 vb.net 中做到这一点

更新: 我知道 control.invoke。但是 control.invoke 需要一个可能会因程序而异的控件。有什么更简单的方法?

所以是的程序是winform。但是,我需要一个不依赖于任何特定控件的解决方案。如果是这种情况,实际上我不需要在主线程上运行东西吗?

【问题讨论】:

  • 这是什么应用程序?安慰? Winforms?
  • 您使用的是什么 UI:WinForms、WPF、Silverlight?
  • “主线程”是什么意思? UI线程被认为是主线程吗?为什么确保您在主线程上很重要?
  • 是 UI 线程,但没有引用任何控件,因为我希望代码在多个不同的表单上运行。

标签: vb.net multithreading main


【解决方案1】:

“确保”是什么意思。您是否希望能够从正在运行的线程检查它是否在主线程上,或者您是否想在代码实际运行之前以编程方式说明它只能在主线程上运行。

您是否尝试从辅助线程更新 UI?如果是这样,通常有比检查线程本身更好的方法(取决于应用程序类型)来做到这一点。例如,在 WinForms 应用程序中,您实际上可以通过检查 InvokeRequired 来安全地询问大多数控件是否需要跨线程调用。如果为真,那么您可以将Delegate 传递给控件以运行您的代码,该代码将为您将其放在主 UI 线程上。

【讨论】:

  • 我知道 control.invoke。但是 control.invoke 需要一个可能会因程序而异的控件。更简单的方法是什么?
【解决方案2】:

没有人能做到这一点。所以我只做了我知道的唯一方法。有一个全局变量并同步该全局变量。它不保证线程将在同一个 UI 线程上运行。但是,它保证代码不会同时运行。这就是我想要的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多