首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >InvokeRequired和ToolStripStatusLabel

InvokeRequired和ToolStripStatusLabel
EN

Stack Overflow用户
提问于 2012-09-14 14:30:58
回答 3查看 8.7K关注 0票数 7

在我的应用程序中,我有一个负责所有数据库操作的类。它从主类调用,并在操作完成后使用委托来调用方法。因为它是异步的,所以我必须在GUI上使用invoke,所以我创建了一个简单的扩展方法:

代码语言:javascript
运行
复制
 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上调用它时,它工作得很好:

代码语言:javascript
运行
复制
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”的隐式引用转换。

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-09-14 14:49:46

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

票数 9
EN

Stack Overflow用户

发布于 2018-07-26 04:48:32

我想把大家都接受的解决方案加起来。您可以使用ToolStripStatusLabel的GetCurrentParent方法从组件获取控件。

不做toolStripStatusLabel1.InvokeIfRequired,而做toolStripStatusLabel1.GetCurrentParent().InvokeIfRequired

票数 2
EN

Stack Overflow用户

发布于 2019-10-10 20:18:34

一种使用 GetCurrentParent().InvokeRequired扩展方法

代码语言:javascript
运行
复制
public static void ToolStripStatusInvokeAction<TControlType>(this TControlType control, Action<TControlType> del)
    where TControlType : ToolStripStatusLabel
    {
        if (control.GetCurrentParent().InvokeRequired)
            control.GetCurrentParent().Invoke(new Action(() => del(control)));
        else
            del(control);
    }

调用ToolStripStatusInvokeAction扩展:

代码语言:javascript
运行
复制
toolStripAppStatus.ToolStripStatusInvokeAction(t =>
{ 
    t.Text= "it works!";
    t.ForeColor = Color.Red;
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12419217

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档