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