在 C# 中的线程之间切换

本文关键字:之间 线程 | 更新日期: 2023-09-27 18:33:47

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

有时,当我快速更改选项卡时,我的线程会停止运行,并且不会给我任何异常或错误。我通过调试了解这种情况。对于这种情况,我看到"线程窗口"中似乎有许多相同的线程,但没有一个正在运行。

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

在 C# 中的线程之间切换

">

我有一个多标签软件。

好的

,好的。

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

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

'当我从一个选项卡切换到另一个选项卡时,我会挂起相关线程,然后为新选项卡启动一个新线程">

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

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

"有时,当我快速更改选项卡时,我的线程会停止运行,并且不会给我任何异常或错误。我通过调试了解这种情况。对于这种情况,我看到"线程窗口"中似乎有许多相同的线程,但没有一个正在运行。

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

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

别动了! 在用户级别对线程进行微观管理几乎总是以灾难告终。

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

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