从c#中的子线程更新控件

时间:2015-04-07 17:50:31

标签: c# multithreading invoke

我试图从子线程更新按钮控件。 将参数传递给新线程时遇到一些问题。 我收到以下消息: ' UpdateText'没有超载匹配委托' System.Threading.ParameterizedThreadStart' (CS0123)

据我所知,ParameterizedThreadStart采取并输入" object"论点。如何投射物体" button1"在我的UpdateText方法中按钮?

    public delegate void MyDelegate(Control ctrl);
    void Button1Click(object sender, EventArgs e)
    {
        Thread thr =new Thread(new ParameterizedThreadStart(UpdateText));
        thr.Start(button1);
    }

    public static void UpdateText(Control control_button)
    {
        if (control_button.InvokeRequired)
        {
            MyDelegate md = new MyDelegate(UpdateText);
            control_button.Invoke(md, control_button);
        }
        else
        {
                control_button.Text = "Updated";
        }
    }

1 个答案:

答案 0 :(得分:1)

将UpdateText参数更改为Object:

 public static void UpdateText(Object o)
    {
        Control control_button = (Control) o;
        // ... the rest of your code ...

ParametrizedThreadStart上查看此参考:

同样在这条线上,我真的不明白你在尝试什么:

MyDelegate md = new MyDelegate(UpdateText);
control_button.Invoke(md, control_button);

您的意思是:

 control_button.Invoke( () => {
     control_button.Text = "Updated"; 
 });

control_button.Invoke(MyDelegate, control_button);