Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 内存映射流-等待数据到达_C#_Callback_Stream_Shared Memory_Memory Mapped Files - Fatal编程技术网

C# 内存映射流-等待数据到达

C# 内存映射流-等待数据到达,c#,callback,stream,shared-memory,memory-mapped-files,C#,Callback,Stream,Shared Memory,Memory Mapped Files,我试图让应用程序A将字节数组写入内存映射流,然后应用程序B读取这段内存。我已经到了他们可以读写的地步,但问题是我不能让应用程序B等待新数据的到来,现在它只能以尽可能快的速度读取 在搜索了一段时间后,我发现您可以将回调分配给MemoryMappedStream.BeginRead,但我不确定如何使用此回调来等待流中的新数据。在这种情况下,人们会如何回电?还是我看错方向了?多亏了马修沃森,我查看了EvenWaitHandles,并通过使用两个自动重置事件,设法让进程等待对方的信号。其中一个用于在执行

我试图让应用程序A将字节数组写入内存映射流,然后应用程序B读取这段内存。我已经到了他们可以读写的地步,但问题是我不能让应用程序B等待新数据的到来,现在它只能以尽可能快的速度读取


在搜索了一段时间后,我发现您可以将回调分配给
MemoryMappedStream.BeginRead
,但我不确定如何使用此回调来等待流中的新数据。在这种情况下,人们会如何回电?还是我看错方向了?

多亏了马修沃森,我查看了EvenWaitHandles,并通过使用两个
自动重置事件,设法让进程等待对方的信号。其中一个用于在执行读取时设置
MemoryReadEventWaitHandle
,另一个用于在完成写入时设置
MemoryWrittenEventWaitHandle
。这样,它们就不会相互干扰,并以正确的顺序执行任务。

可能会对您有所帮助。您可以使用命名作为信号发送给使用线程,以告知数据何时已完全写入。(您可能还需要另一个消费线程的
EventWaitHandle
,以向生产线程表明它已经消费了数据)@MatthewWatson看起来确实是一个有趣的可能性,谢谢您的建议。