簡體   English   中英

在C#中切換線程

[英]Switching between threads in C#

我有一個多標簽軟件。 在每個選項卡中,我想運行不同的線程。 當我從一個選項卡切換到另一個選項卡時,我暫停相關的線程,然后為新選項卡啟動一個新線程。

有時當我快速更改標簽時,我的線程會停止運行並且不會給我任何異常或錯誤。 我通過調試了解這種情況。 對於這種情況,我看到“線程窗口”中有許多相同的線程,但它們都沒有運行。

我認為暫停和啟動線程不是編程的好主意,但我該怎么做才能避免這個問題?

通常的設計是有一個UI線程和多個工作線程:

  • 當有任務要執行時啟動,然后在任務完成時“消失”
  • 在后台永久運行以響應某些事件(即添加到隊列中的項目)

“我有一個多標簽軟件。”

好的。

'在每個標簽中,我想運行不同的線程'

我假設您的意思是每個選項卡都有自己的線程實例,僅與該選項卡交互。 好的,很好,這不是一個不尋常的設計。 也許你在每個標簽上與不同的網站互動,就像那樣。 沒關系。

'當我從一個標簽切換到另一個標簽時,我暫停相關的線程,然后為新標簽啟動一個新線程'

不好! 你為什么做這個? 你能不能只切換標簽? 其他線程可以在不可見的頁面上繼續更新/任何組件(使用Invoke / BeginInvoke),當您切換回時,將顯示更改。

嘿! 編碼器! 留下那些線程!

'有時當我快速更改標簽時,我的線程會停止運行並且不會給我任何異常或錯誤。 我通過調試了解這種情況。 對於這種情況,我看到“線程窗口”中有許多相同的線程,但它們都沒有運行'

我不驚訝。 為每個選項卡啟動一個線程,無論它做什么,只需讓它繼續使用它。

“我認為暫停和啟動線程不是編程的好主意,但我該怎么做才能避免這個問題?”

別這么做了! 用戶級的微管理線程幾乎總是在災難中結束。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM