如何在Windows窗体中获取多个UI线程?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (3)
  • 关注 (0)
  • 查看 (82)

我正在设法使用户控件在他们自己的UI线程中运行。这有可能吗?我试图防止一个基于模块的应用程序因为单个模块而崩溃。

有什么想法吗?

提问于
用户回答回答于

我想这不是程序崩溃的问题。当然,例外情况是可以捕捉到的,但问题在于悬挂控制。为了解决这种情况,下面是一个例子:

public void Button1_Click(object sender, EventArgs args)
{
     while(true) {}
}

如果该代码在控件中运行,则异常不会抛出,但会挂起。我正在尝试确定一种方法来捕捉这个问题,并将控制模块从应用程序中删除。

用户回答回答于

不幸的是,所有UI控件都运行在同一个UI线程上。因此,在这个线程上运行的任何可能导致挂起情况的代码都需要使用某种超时逻辑进行编码。

DateTime startTime = DateTime.Now;
while(DateTime.Now.Subtract(startTime).TotalSeconds < 30)
{
     //do something
}

否则,正如Orlanguage前面所述,所有事件处理程序代码都需要在单独的线程中运行。但是,您仍然需要监视这些线程,以确定它们是否运行时间过长并关闭它们。因此,你最好实现上面的逻辑类型,因为它将减少工作量和更易于维护。

用户回答回答于

那是不可能的。但是,使用一些代码,你可以在不同的线程中运行不同的窗口。每个窗口都有自己的消息循环。

最新情况:

另一种你能想到的方法是用一种特殊的方式写你的控件。你可以通过创建将运行所有逻辑的新线程来处理控件中的所有事件。

所属标签

扫码关注云+社区

领取腾讯云代金券