【发布时间】:2013-10-03 16:36:24
【问题描述】:
我已经解决这个问题很多天了,但我被困在其中,无法弄清楚。问题是当我关闭端口时,我得到了这个著名的错误
The I/O operation has been aborted because of either a thread exit or an application request
我的代码是这样的
private void MenuItem_Click_1(object sender, RoutedEventArgs e)
{
try
{
port.ReadExisting();
port.DiscardInBuffer();
if (port.IsOpen)
{
port.Close();
}
Window1 caster = new Window1(this);
caster.ShowDialog();
}
catch (IOException)
{
}
当port.close() 被执行时,我得到了上述错误。如果我取消订阅数据接收事件,即使这样也会发生此错误并且不会被 catch 语句捕获。
我搜索了它并找到了许多示例,那里提供的所有解决方案都已尝试过,但每次使用应用程序时都让我很烦。
有人可以帮我解决这个问题吗?
【问题讨论】:
-
您确定是引发了 IOException 吗?也许尝试捕获异常,如果确实命中了该捕获,则使用调试器查找类型。
-
我之前曾多次尝试过 Exception 而不是 IOException 但结果相同。然后我认为这可能是 IOException 这就是我问这个问题的原因。
-
有趣。异常应该包括所有异常,这意味着您根本没有遇到异常。查看消息,我想知道错误是否在此代码之外(之后)。在线程完成后,与 I/O 操作类似的东西仍然处于活动状态(或者是“打开”的东西,或者操作是异步的)。然后当你的线程在你的 try 语句之后完成时,系统会注意到一个不再存在的线程的 I/O 操作挂起,取消操作,并给你执行。但是您的 Try 早已不复存在,无法捕捉到它。
-
如果不是在捕获中,您会在哪里得到该错误?尝试全局异常处理程序。 msdn.microsoft.com/en-us/library/… 并且可能打开非托管代码的调试
-
我在关闭端口的地方得到了这个错误。即使不起作用,我也尝试过全局异常。唉
标签: .net io serial-port