弱弱的问一下C#多线程操作界面 最新的问题~~
网上的最优解法
---多线程异步调用委托
先 Thread thread = new (..); thread.IsBackGround = true; Start()
方法的委托()
{while(true)
{ ThreadSleep(???);
if (this.InvokeRequired)
this.BeginInvoke(方法);
else 方法()
}
}
方法() { }
。。。
但是还是出错 至于Control。忽视跨线程的属性, 这个就不要动他了。。。
大家有什么好方法...................................................................
------解决方案--------------------BeginInvoke早就试了 cross-thread异常
是因为你在另外一个 线程中操作 UI 控件了。
------解决方案--------------------可以试试用 WindowsFormsSynchronizationContext 。
异步委托?最优? 算了吧,宁愿用 Contorl.Invoke 都不想用它,起码在绝大部分情况之下, Contorl.Invoke 都会回到 UI 线程上。
------解决方案--------------------下面是比较简便的一种方法!C# code
private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
int n = serialPort1.BytesToRead;
if(n==0) return;
byte[] buffer = new byte[n];
serialPort1.Read(buffer, 0, n);//读所有数据
string s100 = ByteArrayToHexString(buffer);//字节数组转为十六进制字符串
this.Invoke((EventHandler)delegate(object s, EventArgs e)
{
TextBox1.Text += s100 + "\r\n";
});