首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

一上C#多线程操作界面 最新的有关问题~

2012-09-12 
弱弱的问一下C#多线程操作界面 最新的问题~~网上的最优解法---多线程异步调用委托先 Thread thread new

弱弱的问一下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";    }); 

热点排行