网上搜索的办法大致有2种:
1、CheckForIllegalCrossThreadCalls设置为false。
2、委托。
感觉都不好。第一种容易出bug,第二种太麻烦。
本人也是C#菜鸟,初学不久,被这个问题困扰许久。想了一下,用单片机编程的思想可以很方便的解决这个问题。
就是用写队列来处理线程的问题!
比如在另外的线程给TextBox_Log写数据。
在TextBox_Log所在的线程,定义一个API接口以及队列。本例程队列深度为1。根据业务需求可以自己变大。
private static string TextBox_Log_Buf = "NULL";
public static void AddLog(string str)
{
TextBox_Log_Buf = str;
}
然后在TextBox_Log所在的队列设置定时器读取队列写入
private void timer1_Tick(object sender, EventArgs e)
{
if(TextBox_Log_Buf != "NULL")
{
TextBox_Log.Text += "收到数据: " + TextBox_Log_Buf + "\r\n";
TextBox_Log_Buf = "NULL";
}
}
别的线程调用AddLog方法就能给TextBox_Log写数据了!