【发布时间】:2012-01-18 06:27:24
【问题描述】:
我在我的窗口窗体中使用了多线程。以下是我的课。 我的设计器中有一个标签控件,在新创建的线程下我正在更新它的文本属性。
以下是我将函数“UpdateLabel”封装在委托“Del”中的情况。 而且效果很好。
public partial class DynamicType : Form
{
delegate void Del(String x);
public DynamicType()
{
InitializeComponent();
}
private void DynamicType_Load(object sender, EventArgs e)
{
System.Threading.Thread t = new System.Threading.Thread(new System.Threading.ThreadStart(StartThread));
t.Start();
}
private void StartThread()
{
this.Invoke(new Del(UpdateLabel), new object[] { "Hi" });
}
private void UpdateLabel(String str)
{
label1.Text = str;
}
}
我还有一个名为匿名方法的案例。实施匿名方法后 在以下方法中。以下是定义。
private void StartThread()
{
UpdateLabel("Hi");
}
private void UpdateLabel(String str)
{
Del Label = delegate(String k)
{
label1.Text = k;
};
Label("hi");
}
跨线程操作无效:控件“label1”从创建它的线程以外的线程访问。
我的查询是在前一种情况下,我使用了委托,它工作正常,在匿名方法的情况下,我通过直接实例化委托删除了额外的函数,并尝试更新标签控件文本属性,结果崩溃为上文提到的。原因?
【问题讨论】:
标签: c# multithreading c#-4.0 delegates