从另一个线程更新GUI制作容易

介绍 我发现,即使是在后台线程中完成的简单操作需要更新接口,也需要强制这些接口调用返回到相同的线程中,因为接口在… 经过一些研究,我发现这是用Invoke方法完成的。起初,我创建了数百个委托/函数来处理每个控件的更新,但现在,虽然我发布的这个解决方案可以更好,但至少对我来说,它节省了不少时间,所以希望它能帮助其他人…… 基本上,我们下面有一个静态类(thread .cs),它有一些委托,比如SetText(Control, string),可以让你用一些文本设置任何控件的文本。下面的例子是非常基本的,但是在thread .cs中还有很多其他的例子,比如在列表视图中添加条目,改变复选框的复选状态,等等。看看吧。 下面是一个更改控件文本属性的基本示例。 使用 隐藏,复制Code

ThreadSafe.SetText(this.whateverControl, "text to change");

并不简单。 委托 隐藏,复制Code

public delegate void SetTextDelegate(System.Windows.Forms.Control ctrl, string text);

这定义了SetText方法的签名。 该方法 隐藏,复制Code

//generic system.windows.forms.control

public static void SetText(System.Windows.Forms.Control ctrl, string text)
{

    if (ctrl.InvokeRequired)
    {
        object[] params_list = new object[] { ctrl, text };
        ctrl.Invoke(new SetTextDelegate(SetText), params_list);
    }
    else
    {
        ctrl.Text = text;
    }
}

还有其他控件、列表视图、按钮、组合框等的类和继承类,这会节省你编写线程安全GUI代码的时间。希望这对某些人有所帮助。如果有或者需要帮助,请留下评论! 下载助手类 连结至原稿 本文转载于:http://www.diyabc.com/frontweb/news8503.html

上一篇:基于Qt下gui的简易计算器设计


下一篇:android – setText()和append()之间的区别