3

我有一个多标签软件。在每个选项卡中,我想运行不同的线程。当我从一个选项卡切换到另一个选项卡时,我会暂停相关线程,然后为新选项卡启动一个新线程。

有时当我快速更改选项卡时,我的线程停止运行并且没有给我异常或错误。我通过调试了解这种情况。对于这种情况,我看到“线程窗口”中出现了许多相同的线程,但它们都没有运行。

我认为暂停和启动线程不是编程的好主意,但我应该怎么做才能避免这个问题?

4

2 回答 2

3

通常的设计是拥有一个 UI 线程和多个工作线程:

  • 当有要执行的任务时启动,然后在任务完成时“消失”
  • 正在后台永久运行以响应某些事件(即添加到队列中的项目)
于 2012-05-09T08:14:39.123 回答
3

“我有一个多标签软件。”

好的。

'在每个选项卡中,我都想运行不同的线程'

我假设您的意思是每个选项卡都有自己的线程实例,它单独与该选项卡交互。好的,好的,这不是一个不寻常的设计。也许您在每个选项卡上与不同的网站进行交互,类似这样。没关系。

“当我从一个选项卡切换到另一个选项卡时,我会暂停相关线程,然后为新选项卡启动一个新线程”

不好!你为什么做这个?你不能只切换标签吗?其他线程可以在不可见页面上继续更新/任何组件(使用 Invoke/BeginInvoke),并且当您切换回时,将显示更改。

嘿!编码器!别管那些线程!

'有时当我快速更改标签时,我的线程停止运行并且没有给我异常或错误。我通过调试了解这种情况。对于这种情况,我看到“线程窗口”中出现了许多相同的线程,但它们都没有运行'

我不惊讶。为每个选项卡启动一个线程,不管它做什么,只要让它继续下去。

“我认为暂停和启动线程不是编程的好主意,但我应该怎么做才能避免这个问题?”

别干了!用户级别的微管理线程几乎总是以灾难告终。

于 2012-05-09T09:27:54.787 回答