C#线程2个小问题,求教
第一个问题,我想用线程为我的LABEL的TEXT赋值(因为值总在变),即使我用了INVOKE但是依然会出CrossThreadMessagingExceoption,代码如下:
private void delegate InvokeLabelText();private void setLabelText(){ if (this.InvokeRequired) { InvokeLabelText invokeLabelText = new InvokeLabelText(aa); this.Invoke(invokeLabelText); return; } setText();}public void setText(){ lock (this) { this.lblMsg.Text = Util.MSG; //Util.MSG我定义的一个变量,值总会改变 }}
private void delegate InvokeLabelText(string value);private void Form_Load(object sender, EventArgs e){ Thread thread = new Thread(setLabelText); thread.Start();}private void setLabelText(string value){ if (this.InvokeRequired) { InvokeLabelText invokeLabelText = new InvokeLabelText(setLabelText); this.Invoke(invokeLabelText,value); } this.lblMsg.Text = value;}
[解决办法]
private void setLabelText(){ this.Invoke((MethodInvoker)(() => this.setText()));}