[英]Invoke ToolStripMenuItem
我試圖找出是否有辦法調用ToolStripMenuItem。
例如,當返回結果時,我正在調用Web服務(ASynchrously)。根據結果填充下拉項,(在回調方法中)
ToolStripMenuItem.DropDownItems.Add(new ToolStripItemEx("start"));
但我得到例外
跨線程操作無效:控制''從創建它的線程以外的線程訪問。
沒有與工具條項相關聯的調用函數 ,還有另一種方法可以做到這一點嗎? 我試圖以完全錯誤的方式做到這一點嗎? 任何輸入都會有所幫助。
您正在嘗試執行依賴於另一個線程中的控制主線程的代碼,您應該使用Invoke
方法調用它:
toolStrip.Invoke(() =>
{
toolStrip.DropDownItems.Add(new ToolStripItemEx("start"));
});
從與控件最初創建的線程不同的線程訪問控件成員/方法時,應該使用control.Invoke
方法,它將在調用委托中執行到主線程的編組。
編輯:由於您使用的是ToolStripMenuItem
而不是ToolStrip
,因此ToolStripMenuItem
沒有Invoke
成員,因此您可以使用“ this.Invoke
”調用表單,也可以使用toolStrip
其父“ ToolStrip
”調用,這樣:
toolStrip.GetCurrentParent().Invoke(() =>
{
toolStrip.DropDownItems.Add(new ToolStripItemEx("start"));
});
您正嘗試從線程而不是主線程訪問菜單項,因此請嘗試以下代碼:
MethodInvoker method = delegate
{
toolStrip.DropDownItems.Add(new ToolStripItemEx("start"));
};
if (ToolStripMenu.InvokeRequired)
{
BeginInvoke(method);
}
else
{
method.Invoke();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.