繁体   English   中英

在C#中切换线程

[英]Switching between threads in C#

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

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

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

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

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

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

好的。

'在每个标签中,我想运行不同的线程'

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

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

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

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

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

我不惊讶。 为每个选项卡启动一个线程,无论它做什么,只需让它继续使用它。

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

别这么做了! 用户级的微管理线程几乎总是在灾难中结束。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM