我有一个多标签软件。在每个选项卡中,我想运行不同的线程。当我从一个选项卡切换到另一个选项卡时,我暂停相关的线程,然后为新选项卡启动一个新线程。
有时当我快速更改标签时,我的线程会停止运行并且不会给我任何异常或错误。我通过调试了解这种情况。对于这种情况,我看到“线程窗口”中有许多相同的线程,但它们都没有运行。
我认为暂停和启动线程不是编程的好主意,但我该怎么做才能避免这个问题呢?
答案 0 :(得分:3)
通常的设计是有一个UI线程和多个工作线程:
答案 1 :(得分:3)
'我有一个多标签软件。'
好的,很好。
'在每个标签中,我想运行不同的主题'
我假设您的意思是每个选项卡都有自己的线程实例,该实例仅与该选项卡进行交互。好的,很好,这不是一个不寻常的设计。也许你在每个标签上与不同的网站互动,就像那样。没关系。
'当我从一个标签切换到另一个标签时,我暂停相关的线程,然后为新标签启动一个新线程'
不行!你为什么做这个?你能不能只切换标签?其他线程可以在不可见的页面上继续更新/任何组件(使用Invoke / BeginInvoke),当您切换回来时,将显示更改。
喂!编码器!留下那些线程!
'有时当我快速更改标签时,我的线程会停止运行并且不会给我任何异常或错误。我通过调试了解这种情况。对于这种情况,我看到“线程窗口”中有许多相同的线程,但它们都没有运行'
我并不感到惊讶。为每个标签启动一个线程,无论它做什么,只需留下它继续使用它。
'我认为暂停和启动线程不是编程的好主意,但我该怎么做才能避免这个问题?'
停止这样做!用户级的微管理线程几乎总是以灾难结束。