想开一个线程处理接收到的数据(暂时不考虑有没有必要),是在DataReceived里面开?还是外面开?
private void Comm_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
//在这里开线程?
}
//还是外面开线程?
private void Comm_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
//我一般是这样启用线程的
new Thread=(()=>{
线程里面操作
}).Start();
}
你帮忙看看我说的那种情况是什么原因
@某: 如果你这样开启线程很有可能会处于一个线程一直阻塞状态所以才会卡住不动
@陈逆天: private void Form1_Load(object sender, EventArgs e)
{
Thread t = new Thread(() => MyThread(buffer));
t.Start();
}
这样开线程也会出现啊,好奇怪。然后百度了一下,有挺多人会遇见这样的情况:在线程里添加方法,然后在方法里加断点,进去方法后也不能执行下一步,整个软件就卡住。他们都一样用VS2015。难道是VS2015问题?我用win10系统。
@某: 你能截个图么,还有我用的是VS2013我还真没碰到过着样的问题
@陈逆天:
@某: 这个我也不知道了
匿名线程写在里面或者显示的写在外面效果不是一样的么
菜鸟一个,我不明白,所以请教你们。
private void Comm_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
////
Thread t = new Thread(() => MyThread(buffer));
t.Start();
}
void MyThread(string str)
{
//处理代码
}
如果我这样写,在void MyThread(string str)设置断点,进到断点后,按就F10,F11,程序都不会往下走了,像死了一样,这为什么呢?
@某: 代码问题,自己检查
@hahanonym:
void MyThread(string str)
{
if (queue.Count > 0)
{
MessageBox.Show(buffer);
}
else
{
//
}
}
可是就算是这样简单的代码,也会出现我说的那样情况
@某: 把其他地方的断点去掉,只保留此处,卡在哪一句,就把哪一句注释掉。定位是哪句的问题
@hahanonym:
void MyThread(string str)
{//在大括号这里设置断点,就马上卡了
//
//
}
@某: 我这里测试没有问题,检查你自己的开发环境以及相关设置
@hahanonym: 我检查一下,我用VS1025