在C#中切换线程

时间:2012-05-09 08:11:27

标签: c# multithreading

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

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

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

2 个答案:

答案 0 :(得分:3)

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

  • 在有任务要执行时启动,然后在任务完成时“消失”
  • 在后台永久运行,以响应某些事件(即添加到队列中的项目)

答案 1 :(得分:3)

'我有一个多标签软件。'

好的,很好。

'在每个标签中,我想运行不同的主题'

我假设您的意思是每个选项卡都有自己的线程实例,该实例仅与该选项卡进行交互。好的,很好,这不是一个不寻常的设计。也许你在每个标签上与不同的网站互动,就像那样。没关系。

'当我从一个标签切换到另一个标签时,我暂停相关的线程,然后为新标签启动一个新线程'

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

喂!编码器!留下那些线程!

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

我并不感到惊讶。为每个标签启动一个线程,无论它做什么,只需留下它继续使用它。

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

停止这样做!用户级的微管理线程几乎总是以灾难结束。