相关疑难解决方法(0)

关闭.NET SerialPort后的ObjectDisposedExecption

我使用.NET 4 SerialPort对象与连接到COM1的设备进行通信.

当我完成设备后,我在SerialPort上调用Close.我不会调用Dispose,但我相信Close和Dispose在这里是同义词.

通常这很好用.

但是,有时我会在一段时间后得到以下异常(我看到的时间范围从5毫秒到175毫秒):

System.ObjectDisposedException: Safe handle has been closed
     at System.Runtime.InteropServices.SafeHandle.DangerousAddRef(Boolean& success)
     at System.StubHelpers.StubHelpers.SafeHandleAddRef(SafeHandle pHandle, Boolean& success)
     at Microsoft.Win32.UnsafeNativeMethods.GetOverlappedResult(SafeFileHandle hFile, NativeOverlapped* lpOverlapped, Int32& lpNumberOfBytesTransferred, Boolean bWait)
     at System.IO.Ports.SerialStream.EventLoopRunner.WaitForCommEvent()
     at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
     at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
     at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
     at System.Threading.ThreadHelper.ThreadStart()

我的代码都没有在这个堆栈上.

我找到了http://blog.zachsaw.com/2010/07/serialport-ioexception-workaround-in-c.html,但那里的解决方案没有用.在进一步检查时,问题是IOException,而不是ObjectDisposedException.

关于拔掉USB转串口设备但是COM1在板载时观察到的问题有很多帖子,所以它并没有意外消失.

这里的问题也不是我的问题; SerialPort在其使用期间保持活动状态,并且仅在我与设备通话时才关闭.(一旦我完成,设备处于不会传输任何其他数据的状态.)

SLaks 建议在入口处设置一个断点SafeHandle.Dispose,以确定我何时处理我不应该做的事情,但是我会破坏该断点数十次.SerialPort.Close当我完成使用串行设备时,我的单次调用会调用三次,其余大约一半都在GC线程中.其余部分似乎与WPF UI元素相关.

我现在不知所措.我从哪里开始?

有没有办法确定哪个SafeHandle属于哪个对象,所以我可以肯定我没有意外地处理它?
除了Close之外还有一些咒语我需要正确关闭SerialPort吗?

.net c# serial-port .net-4.0 objectdisposedexception

10
推荐指数
1
解决办法
5838
查看次数

SerialPort问题

我正在使用SerialPort与条形码阅读器进行通信(只读).

我已经安装了驱动程序来操作阅读器,就好像它是通过Com-port连接的,虽然它是一个usb设备.插入设备后,列表中会再出现一个Com-port.

问题如下.我初始化SerialPort对象以从条形码阅读器读取,但如果读取器被拔掉,我无法正确完成或处置SerialPort对象,因为它"附加"的端口不再存在.

程序关闭时,结果是WinIOException.我不仅在使用SerialPort的代码中捕获它,而且在program.cs级别也是如此.根据堆栈,在尝试完成和处理SerialPort对象后抛出WinIOException.

我有什么想法可以正确操作这种情况吗?或者至少要抓住异常?

我确切知道的是问题不在于这个特定的驱动程序; 我还有一个来自其他制造商的条形码阅读器(具有相同目的的驱动程序) - 情况是一样的.

c# usb serial-port

8
推荐指数
2
解决办法
1万
查看次数

PHP - 从Windows读取COM端口

以下是通过PHP进行串行通信的库:http://www.phpclasses.org/package/3679-PHP-Communicate-with-a-serial-port.html.问题是readPort方法没有完全实现.它可以在*nix环境中读取,但显然不在Windows环境中读取.方法:

/**
 * Reads the port until no new datas are availible, then return the content.
 *
 * @pararm int $count number of characters to be read (will stop before
 *  if less characters are in the buffer)
 * @return string
 */
function readPort ($count = 0)
{
    if ($this->_dState !== SERIAL_DEVICE_OPENED)
    {
        trigger_error("Device must be opened to read it", E_USER_WARNING);
        return false;
    }

    if ($this->_os === "linux")
    {
        $content = ""; $i = 0;

        if …
Run Code Online (Sandbox Code Playgroud)

php serial-port

6
推荐指数
1
解决办法
2万
查看次数

标签 统计

serial-port ×3

c# ×2

.net ×1

.net-4.0 ×1

objectdisposedexception ×1

php ×1

usb ×1