串口打开后,开启接收线程,程序正常运行 serialsReceiveThread = new Thread(new ThreadStart(serialReceive));
serialsReceiveThread.Start();//开始接收线程当我关闭串口时,应该先停止接收线程,但是报异常了,何解?代码如下:
//根据当前串口对象,来判断操作
if (comm.IsOpen)
{
try
{
serialsReceiveThread.Abort();
if (ThreadState.Stopped == serialsReceiveThread.ThreadState)
{
//打开时点击,则关闭串口
comm.Close();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
serialsReceiveThread.Start();//开始接收线程当我关闭串口时,应该先停止接收线程,但是报异常了,何解?代码如下:
//根据当前串口对象,来判断操作
if (comm.IsOpen)
{
try
{
serialsReceiveThread.Abort();
if (ThreadState.Stopped == serialsReceiveThread.ThreadState)
{
//打开时点击,则关闭串口
comm.Close();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
解决方案 »
- 如何用C#检测系统是否安装了 .NET Framework以及安装的版本?
- iis感觉不稳定,有时候部份内容打不开。
- TreeView的问题
- 系统当前月份
- 概念性问题
- 在线等..!!!大家来看看,一个SQL语句的问题,这样写这个SQL语句??
- 急!!!!!!!!!!!!!!C#和C#.NET是不是一回事啊
- 一个关于直接调用Interop.CDO.dll组件生成MHT文件,出现的问题
- 这样的数据操作真的没有人会吗?
- 如何用treeview+datagrid做出象sqlserver资源管理器一样的效果?在treeview节点显示数据库,子节点是表,点表则在datagrid中显示记录。
- aspx竟然无法显示背景图片
- c# winform,我想用几个button做个简单的屏幕键盘-供textbox用~~求指教
貌似这样不可取呀 我的接收线程里是个
while(true)
{} if (comm.IsOpen)
{
try
{
serialsReceiveThread.Suspend();
if (ThreadState.Stopped == serialsReceiveThread.ThreadState)
{
//打开时点击,则关闭串口
comm.Close();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
if (comm.IsOpen)
{
try
{
//serialsReceiveThread.Suspend();
serialsReceiveThread.Abort();
comm.Close();
}
catch
{
return;
}
}
上面那样也不行啊还是有下面的异常未处理 System.ObjectDisposedException
Message=已关闭 Safe handle
Source=mscorlib
ObjectName=""
StackTrace:
在 Microsoft.Win32.Win32Native.SetEvent(SafeWaitHandle handle)
在 System.Threading.EventWaitHandle.Set()
在 System.IO.Ports.SerialStream.AsyncFSCallback(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* pOverlapped)
在 System.Threading._IOCompletionCallback.PerformIOCompletionCallback(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* pOVERLAP)
InnerException:
{ CheckPass();
//other process
}在起线程的时候生成一个Dictionary<string, ThreadStatus>string是Thread的唯一标识
enum ThreadStatus{}里面写上你需要的线程的状态。CheckPass()检测当前线程的状态,根据状态每个线程自身决定自身的运行状态。
comm.Close();
serialsReceiveThread.Abort();
把这两句掉了个个,就暂时没有问题了,,原来是abort(),在上 呵呵不是最佳办法,测试DEMO 也凑合用 呵呵