在我的应用程序中,我有一个负责所有数据库操作的类。它从主类调用,并在操作完成后使用委托来调用方法。因为它是异步的,所以我必须在GUI上使用invoke,所以我创建了一个简单的扩展方法:
public static void InvokeIfRequired<T>(this T c, Action<T> action)
where T: Control
{
if (c.InvokeRequired)
{
c.Invoke(new Action(() => action(c)));
}
else
{
action(c);
}
}
当我尝试在textBox上调用它时,它工作得很好:
textBox1.InvokeIfRequired(c => { c.Text = "it works!"; });
但是当我试图在ToolStripStatusLabel或ToolStripProgressBar上调用它时,我得到了一个错误:
类型'System.Windows.Forms.ToolStripStatusLabel‘不能用作泛型类型或方法'SimpleApp.Helpers.InvokeIfRequired(T,System.Action)’中的类型参数'T‘。不存在从“System.Windows.Forms.ToolStripStatusLabel”到“System.Windows.Forms.Control”的隐式引用转换。
我知道这可能是一个简单的修复,但我可以处理它:/
发布于 2018-07-26 04:48:32
我想把大家都接受的解决方案加起来。您可以使用ToolStripStatusLabel的GetCurrentParent方法从组件获取控件。
不做toolStripStatusLabel1.InvokeIfRequired
,而做toolStripStatusLabel1.GetCurrentParent().InvokeIfRequired
https://stackoverflow.com/questions/12419217
复制相似问题