C#关闭窗体时,界面卡死,我主要是想测试不关闭串口,直接关闭窗体会是怎么样的效果
Closing=true;m_IsTryToClosePort=true;while(m_IsReceiving){System.Windows.Forms.Applic...
Closing = true;
m_IsTryToClosePort = true;
while (m_IsReceiving)
{
System.Windows.Forms.Application.DoEvents(); //处理界面卡死 用DoEvents
}
SerialPort.Dispose();
串口接受数据事件里面
if (Closing) return;//如果正在关闭,忽略操作,直接返回,尽快的完成串口监听线程的一次循环 展开
m_IsTryToClosePort = true;
while (m_IsReceiving)
{
System.Windows.Forms.Application.DoEvents(); //处理界面卡死 用DoEvents
}
SerialPort.Dispose();
串口接受数据事件里面
if (Closing) return;//如果正在关闭,忽略操作,直接返回,尽快的完成串口监听线程的一次循环 展开
1个回答
展开全部
while (m_IsReceiving)
{
System.Windows.Forms.Application.DoEvents(); //处理界面卡死 用DoEvents
}
你这个是死循环啊!!肯定会卡死的!!
{
System.Windows.Forms.Application.DoEvents(); //处理界面卡死 用DoEvents
}
你这个是死循环啊!!肯定会卡死的!!
追问
我的m_IsReceiving是在串口事件里面做的标志位, 那你说怎么改才不会卡死?
追答
窗口关闭后,系统将结束所有的动作并会释放资源,那么你的串口通信还在继续,但是你的窗口已经不再去处理你的串口数据咯,m_IsReceiving就会一直保持一个固定状态,哪不就是要出现死循环咯。
丢到线程里面去不卡死
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询