C# windowsxp下的Twain消息循环

C# windowsxp下的Twain消息循环,c#,google-chrome-extension,twain,chrome-native-messaging,twaindotnet,C#,Google Chrome Extension,Twain,Chrome Native Messaging,Twaindotnet,我正在开发一个谷歌Chrome Twain插件,事实上,它几乎完成了。唯一的主要问题是:该插件在WindowsXP下无法工作。而这并不是我们想要的 该插件使用Chrome原生消息在Chrome和单独的扫描过程之间建立通信,并与TWAIN接口 不幸的是,没有什么可以阻止TWAIN驱动程序向stdout/stderr发送任何文本,因此我不得不使用两阶段解决方案:本机消息主机的第一个进程通过stdin/stdout与Chrome通信,第二个进程通过匿名管道与第一个进程通信,并真正完成任务,即处理消息和

我正在开发一个谷歌Chrome Twain插件,事实上,它几乎完成了。唯一的主要问题是:该插件在WindowsXP下无法工作。而这并不是我们想要的

该插件使用Chrome原生消息在Chrome和单独的扫描过程之间建立通信,并与TWAIN接口

不幸的是,没有什么可以阻止TWAIN驱动程序向stdout/stderr发送任何文本,因此我不得不使用两阶段解决方案:本机消息主机的第一个进程通过stdin/stdout与Chrome通信,第二个进程通过匿名管道与第一个进程通信,并真正完成任务,即处理消息和与TWAIN的接口

不知怎的,第二道工序的管道对吐温来说成了一个问题。经过一些实验后,我发现如果我在第二个过程中没有创建任何管道,或者如果我创建了管道但没有使用它们,也就是说,我没有读取或写入管道,那么一切都会正常进行。但是,如果管道上只有一个读或写操作,那么使用TWAIN的任何操作都会挂起,就像线程中没有运行消息循环一样

因此,我认为使用管道,我的意思是在管道上执行读写操作,以某种方式打破了吐温正常工作所需的消息循环

我是Windows消息处理的新手,所以

当我使用匿名管道时,我不完全了解应用程序中发生了什么,并且 使用管道如何干扰TWAIN,以及 为什么该问题仅在Windows XP下出现。 我唯一的想法是匿名管道异步IO是通过windows消息实现的。因此,我将感谢有助于解决此问题的信息和/或建议

插件源可以在my GitHub存储库解决方案TwainScan中找到:

如果没有相关的代码,或者至少没有关于如何建立沟通的算法的更多细节,我很确定这是不可回答的。我的代码可以在[link]上找到,这是一种不可接受的做法。长篇大论真的不适合评论:改为编辑你的问题。我同意,但代码太大,无法在这里发布,因此我将尝试制作一个简短的示例来演示这个问题。现在,长话短说:1。如果创建TwainDotNet.Twain对象,但不创建匿名管道System.IO.pipes.AnonymousPipeClientStream,则一切都会按预期进行。2.如果我创建Twain对象和AnonymousPipeClientStream对象,但不通过管道发送或接收一个字节,同样,一切正常。3.但是,如果我通过管道进行通信,然后尝试创建Twain对象,则进程将挂起,就像没有消息处理循环在运行一样。对于潜在的回答者来说,在多行上设置该选项将有助于提高可读性。