繁体   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