C# this.InvokeRequired
哪个大侠能帮我解释下下面代码是什么意思么。这是串口通信的代码,txtReceive是接收的控件名,谢谢了~
public delegate void UpdateString(object NewData);
public void UpdateRecevie(object NewData)
{
if (this.InvokeRequired)//等待异步
{
UpdateString _myInvoke = new UpdateString(UpdateRecevie);
this.Invoke(_myInvoke, new object[] { NewData });
}
else
{
txtReceive.AppendText(NewData.ToString());
txtReceive.SelectionStart = txtReceive.Text.Length - 1;
txtReceive.ScrollToCaret();
}
}
public void UpdateReceiveCount(object NewCount)
{
if (this.InvokeRequired)//等待异步
{
UpdateString _myInvoke = new UpdateString(UpdateReceiveCount);
this.Invoke(_myInvoke, new object[] { NewCount });
}
else
{
lblRCount.Text = (Convert.ToInt32(lblRCount.Text) + Convert.ToInt32(NewCount)).ToString();
}
}
C# this.InvokeRequired
[解决办法]
this.InvokeRequired
说白了,判断当前线程是否是UI线程。
如果this.InvokeRequired = true,你需要通过this.Invoke()传递委托去操作界面。否则直接操作即可。
[解决办法]
对于不是UI线程上边的代码,如果需要操作UI控件,就需要使用Invoke 或者beginInvoke。
类似的,,如果你在UI的线程上边访问UI控件,就可以直接访问数据。