InvokeRequired和ToolStripStatusLabel

Mis*_*siu 6 c# invokerequired .net-3.5 winforms

在我的应用程序中,我有一个负责所有数据库操作的类.它从主类调用,并在动作完成后使用委托调用方法.因为它是异步的,我必须在我的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);
            }
        }
Run Code Online (Sandbox Code Playgroud)

当我尝试在textBox上调用它时,这工作正常:

textBox1.InvokeIfRequired(c => { c.Text = "it works!"; });
Run Code Online (Sandbox Code Playgroud)

但是当我尝试在ToolStripStatusLabel或ToolStripProgressBar上调用它时,我收到一个错误:

类型'System.Windows.Forms.ToolStripStatusLabel'不能在泛型类型或方法'SimpleApp.Helpers.InvokeIfRequired(T,System.Action)'中用作类型参数'T'.没有从'System.Windows.Forms.ToolStripStatusLabel'到'System.Windows.Forms.Control'的隐式引用转换.

我知道这可能是一个简单的修复,但我只能处理它:/

sla*_*win 9

这是因为ToolStripItem(导致错误的两个基础)是Component而不是Control.尝试在拥有它们的工具条上调用扩展方法并调整委托方法.

  • http://msdn.microsoft.com/en-us/library/system.windows.forms.toolstrip.items.aspx MSDN 是您的朋友:) (2认同)