我有一个FTDI写入功能,该程序在.net3.5时仍在运行,但我一直在对其进行更新,因此它现在可以在.net 4.0上运行,现在我的FTDI写入功能在输入后不再返回。

private FT_HANDLE portHandle = 0;

public unsafe int Write(byte[] buffer, int offset, int count)
{
    if (portHandle == 0)
    {
        throw new IOException("Port Closed");
    }

    try
    {
        uint bytesWritten = 0;
        Status status = Status.FT_OTHER_ERROR;
        byte[] data = new byte[count];
        for (int i = 0; i < count; i++)
        {
            data[i] = buffer[i + offset];
        }
        fixed (byte* pBuffer = data)
        {
            status = FT_Write(portHandle, pBuffer, (uint)count, ref bytesWritten);// the line that never returns
        }
        if (status == Status.FT_OK)
        {
            return (int)bytesWritten;
        }
        throw new IOException("Failed To Write: " + status.ToString());
    }
    catch (DllNotFoundException ex)
    {
        throw new NotSupportedException("Driver not installed", ex);
    }
}


如果选中,portHandle不会陷入等于0的位置。
我的问题是可能导致此问题的原因以及如何解决。

最佳答案

在点net3.5到4.0中,它们会更改计时器和此类设备的设置,首先将您的计时器设置为所需的计时器。但是,请勿使用varaiables和getter和setter,因为Windows使用它们的方式会使用常量和uint,因此它们将不起作用。确保您给读和写都足够的时间(读通常比写长)记住时间以毫秒为单位这应该工作,因为当我进行切换时我遇到了同样的问题

所以要点设置了读写超时

不要使用getter和setter

确保他们同意

10-06 16:13