C# FTDI写入功能永不终止

C# FTDI写入功能永不终止,c#,.net-4.0,.net-3.5,ftdi,C#,.net 4.0,.net 3.5,Ftdi,我有一个FTDI写函数,它在程序运行.net3.5时起作用,但我一直在更新它,因此它现在在.NET4.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")

我有一个FTDI写函数,它在程序运行.net3.5时起作用,但我一直在更新它,因此它现在在.NET4.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);
    }
}
private FT_HANDLE portHandle=0;
公共不安全整数写入(字节[]缓冲区、整数偏移量、整数计数)
{
if(portHandle==0)
{
抛出新IOException(“端口关闭”);
}
尝试
{
uint字节写入=0;
Status Status=Status.FT_其他_错误;
字节[]数据=新字节[计数];
for(int i=0;i
portHandle
在检查时不会陷入与0等价的状态。
我的问题是,是什么导致了这种情况,我该如何修复它。

在dot net3.5到4.0中,他们会更改计时器和此类设备的设置,首先将计时器设置为所需的值,但是,不要使用变量、getter和setter,因为它们不会工作,因为windows使用它们的方式是使用常量和uint,并确保您为读和写(读通常比写长)提供足够的时间记住时间是以毫秒为单位的,这应该可以工作,因为我在切换时遇到了相同的问题

因此,要点设置读取和写入超时

不要使用getter和setter


确保它们是恒定的

它工作正常吗?如果不是的话,你可能有一个被FTDI驱动程序屏蔽的假芯片。是的,这个设备已经使用了8年多,软件应该每年更新一次,当我改成.net 4.0时,它就停止工作了,所以它可以正确地与HyperTerm一起工作?如果是,您是否尝试过其他USB端口?您是否已将调试器设置为混合模式并查看本机堆栈?它在超级终端上工作(如果您的意思是这样的话)和混合模式您是指任何cpu设置?如果是,则调用satck top项是
[管理到本机转换]
,之前的项是
[FTDI.Write(带参数)]
,请在项目属性中选择调试。选中“启用本机调试”。当它“挂起”时,中断调试器。在调用堆栈中,您可能应该启用查看所有代码。可能是您需要使用的“工具”、“选项”、“调试”下的其他选项。这会告诉你它在等什么。