C# 线程问题
时间:2011-12-17
来源:互联网
我做了一个简单的串口接收程序,程序是这样的,启动时打开串口,创建了一个接收线程,一直循环接收数据。界面上有关于串口的一些配置,比如串口号。当程序运行起了之后正常接收数据了,改变串口号,也就是改变了serialPort的name属性后,线程出现异常。其实我也知道是因为线程中一直是使用的serialPort在接收数据,但是界面线程中改变了serialPort的属性出现的异常,可是不这样的话该如何处理呢,对于C#中的多线程处理还不是很清楚,望各位大虾指教
初始化加载窗口时创建启动线程:
private void MainForm_Load(object sender, EventArgs e)
{
threadconn = new Thread(serialRecv);
threadconn.IsBackground = true;
threadconn.Start();
}
接收线程程序:
private void serialRecv()
{
byte[] recvbuf = new byte[1024];
int recvlen = 0;
while (serialPort.IsOpen)
{
Thread.Sleep(10);
recvlen = serialPort.Read(recvbuf, 0, recvbuf.Length);//serialPort是串口控件
}
DispalyData(recvbuf);
}
界面线程中改变串口号的配置:
private void comboSerialPort_SelectedIndexChanged(object sender, EventArgs e)
{
if (serialPort.IsOpen == true)
{
serialPort.Close();
}
serialPort.PortName = comboSerialPort.Text;
serialPort.Open();
}
初始化加载窗口时创建启动线程:
private void MainForm_Load(object sender, EventArgs e)
{
threadconn = new Thread(serialRecv);
threadconn.IsBackground = true;
threadconn.Start();
}
接收线程程序:
private void serialRecv()
{
byte[] recvbuf = new byte[1024];
int recvlen = 0;
while (serialPort.IsOpen)
{
Thread.Sleep(10);
recvlen = serialPort.Read(recvbuf, 0, recvbuf.Length);//serialPort是串口控件
}
DispalyData(recvbuf);
}
界面线程中改变串口号的配置:
private void comboSerialPort_SelectedIndexChanged(object sender, EventArgs e)
{
if (serialPort.IsOpen == true)
{
serialPort.Close();
}
serialPort.PortName = comboSerialPort.Text;
serialPort.Open();
}
作者: blwuer 发布时间: 2011-12-17
作者: hefeng_aspnet 发布时间: 2011-12-18
你这个似乎是逻辑问题,不是语言问题了
程序:UI线程,接受线程
UI线程会改变接受线程接受的对象
那么你可以这么做:
1.UI线程和接受线程消息通信
2.你的接受线程要可控,可停止,可启动
3.你改变串口设置的时候,应该是这样的:停止接受,修改设置,启动接受
那么主要问题就是c#线程怎么相应消息了:
这个你看看PostThreadMessage函数,GetMessage函数
可以看看这个:http://www.diybl.com/course/4_webprogram/asp.net/asp_netshl/2007126/90800.html
你自己定义消息就好了
程序:UI线程,接受线程
UI线程会改变接受线程接受的对象
那么你可以这么做:
1.UI线程和接受线程消息通信
2.你的接受线程要可控,可停止,可启动
3.你改变串口设置的时候,应该是这样的:停止接受,修改设置,启动接受
那么主要问题就是c#线程怎么相应消息了:
这个你看看PostThreadMessage函数,GetMessage函数
可以看看这个:http://www.diybl.com/course/4_webprogram/asp.net/asp_netshl/2007126/90800.html
你自己定义消息就好了
作者: shyandsy 发布时间: 2011-12-18
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28