从另一个线程c#控制子表单

时间:2011-09-30 06:42:06

标签: c# winforms backgroundworker multithreading

在我的项目中,我有:
Form1,< - 这是主要形式,在主线程中运行
Form2,< - 这是子表单
1名背景工作者

经历过的问题:
当我在后台工作程序中创建一个新表单,并使用

显示它
Form2 test = new Form2(); *test.show();*

表单显示,但冻结,我无法对形式做任何事

问题是:
1.它能够在后台工作程序中创建一个表单,但是表单将在主线程上运行吗? 2.如果是,怎么做? :)
3.如果没有,如何控制我在主线程上声明的表单,来自backgroundworker

1 个答案:

答案 0 :(得分:0)

您应该使用Control.Invoke来创建新表单。

public static class InvokeControl
    {
        public static void InvokeIfRequired(this Control c, Action<Control> action)
        {
            if (c.InvokeRequired)
            {
                c.Invoke(new Action(() => action(c)));
            }
            else
            {
                action(c);
            }
        }
    }

并通过

对此方法进行分类
InvokeControl.InvokeIfRequired(this, c => {//Create you're form here});