我试图从子线程更新按钮控件。 将参数传递给新线程时遇到一些问题。 我收到以下消息: ' 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";
}
}
答案 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);