Dot-Net

如何對 ToolStripStatusLabel 進行跨執行緒呼叫?

  • March 25, 2021

我傾向於在我的大多數應用程序的底部使用 StatusStrip 來進行簡單的狀態更新,偶爾還會使用進度條。

但是,似乎 ToolStripStatusLabels 沒有從控制項繼承,因此它們沒有 .Invoke 或 .InvokeRequired。那麼我將如何進行執行緒安全呼叫來更改它的 text 屬性呢?

為後代和其他人搜尋的編碼答案:

Action<string> test=(text) =>
           {
               if (this._statusStrip.InvokeRequired) this._statusStrip.Invoke(
              new MethodInvoker(() => this._lblStatus.Text = text));
               else this._lblStatus.Text = text;
           };

要麼

private void TestInvoker(string text)
   {
       if (this._statusStrip.InvokeRequired) 
           this._statusStrip.Invoke(
                  new MethodInvoker(() => this._lblStatus.Text = text));
       else this._lblStatus.Text = text;
   }

這是一個很好的問題!

雖然ToolStripStatusLabel不從控制項繼承,但包含ToolStrip!使用包含ToolStrip的 Invoke 對ToolStripStatusLabel.

這是因為 ToolStrip 手動處理其組件位的繪製,與 WPF 管理其所有組件位的繪製的方式非常相似,而無需為每個組件生成單獨的句柄。這很有用,因為很容易忘記每個Control人都有一個相關聯HANDLE的,並且系統只有有限數量的那些要分發,例如。

(我之前也遇到過這個問題。例如,我在另一個問題的側邊欄中提到了它。我應該更新該文本以反映我最近的理解。)

引用自:https://stackoverflow.com/questions/1127973