Dot-Net
如何對 ToolStripStatusLabel 進行跨執行緒呼叫?
我傾向於在我的大多數應用程序的底部使用 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的,並且系統只有有限數量的那些要分發,例如。(我之前也遇到過這個問題。例如,我在另一個問題的側邊欄中提到了它。我應該更新該文本以反映我最近的理解。)