簡體   English   中英

調用ToolStripMenuItem

[英]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.

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