【发布时间】:2015-04-23 17:10:33
【问题描述】:
因此,我对这段代码的总体目标是从不同的线程(以安全的方式)设置标签的文本属性。
namespace csDinger3
{
public delegate void setlblStarted_txt(string text);
public partial class ClientUI : Form
{
public void setlblStarted_txt(string text)
{
var setlblStarted a = new setlblStarted(setlblStarted_txt);
if (this.lblStarted.InvokeRequired)
{
this.Invoke(a, new object[] { text });
}
else
{
this.lblStarted.Text = text;
}
}
}
}
调用代码:
namespace csDinger3
{
public class Program
{
// Some code that's not relevant
public static void updateText(Int32 number)
{
setlblStarted x = new setlblStarted(ClientUI.setlblStarted_txt);
x(number.ToString());
}
}
}
据我所知(如果我错了,请纠正我),我需要创建一个setlblStarted_txt 的新实例,将该新实例指向方法setlblStarted_txt,但问题目前是ClientUI.setlblStarted_txt不是静态的,并且需要对象引用。
我尝试过使用ClientUI c = new ClientUI();,但这不起作用(因为它正在创建表单的新实例?)
我做错了什么,如果可能的话,你能帮我理解为什么吗?
【问题讨论】:
-
你想达到什么目的?在 .NET 4.0 中,大多数时候不需要声明委托。
-
为什么要把这段代码放在
Program类中?它是启动应用程序的那个。你应该把它放在 WinForms 类的代码隐藏中。 -
@Cameron 我把它用作中心类,但我想我可以很容易地改变它
标签: c# .net multithreading winforms