【问题标题】:C# WPF Anonymous Pipes AnonymousPipeClientStream pipe direction out doesn't workC# WPF 匿名管道 AnonymousPipeClientStream 管道方向输出不起作用
【发布时间】:2016-09-02 05:51:17
【问题描述】:

我正在开发一个测试应用程序,以使用匿名管道在 2 个进程之间进行通信。我可以从 ServerView 向 ClientView 发送消息,但我不能反过来,因为管道连接会引发异常。

服务器代码

 public class PipeServerHandler
{
    private static AnonymousPipeServerStream serverSenderStream;
    private static AnonymousPipeServerStream serverReceiverStream;
    private static StreamWriter sw;
    private static StreamReader sr;


    public void ServerStart()
    {
        serverSenderStream = new AnonymousPipeServerStream(PipeDirection.Out, HandleInheritability.Inheritable);
        serverReceiverStream = new AnonymousPipeServerStream(PipeDirection.In, HandleInheritability.Inheritable);

        string senderID = serverSenderStream.GetClientHandleAsString();
        string receiverID = serverReceiverStream.GetClientHandleAsString();

        ProcessStartInfo process = new ProcessStartInfo(@"C:\Users\VinushaP\Documents\Visual Studio 2015\Projects\CommunicationProject\ClientView\bin\Debug\ClientView.exe", senderID + "_" + receiverID);
        process.UseShellExecute = false;

        Process clientProcess = Process.Start(process);

        serverSenderStream.DisposeLocalCopyOfClientHandle();

        sr = new StreamReader(serverReceiverStream);
    }

    public string ReadData()
    {
        string temp;
        temp = sr.ReadLine();

        return temp;
    }
}

客户代码

public class PipeClientHandler
{

    private static AnonymousPipeClientStream clientReceiverStream;
    private static AnonymousPipeClientStream clientSenderStream;
    private static StreamReader sr;
    private static StreamWriter sw;

    public void ClientStart(string[] args)
    {
        string[] id = args[0].Split('_');
        string senderID = id[0];
        string receiverID = id[1];

        clientReceiverStream = new AnonymousPipeClientStream(PipeDirection.In, senderID);
        clientSenderStream = new AnonymousPipeClientStream(PipeDirection.Out, receiverID);

        sw = new StreamWriter(clientSenderStream);
        sw.AutoFlush = true;
    }

    public void WriteStream(string data)
    {
        sw.WriteLine(data);
        clientSenderStream.WaitForPipeDrain();
    }

}

这是捕获命令行参数的 app.xaml.cs 类

private void Application_Startup(object sender, StartupEventArgs e)
    {
        PipeClientHandler handler = new PipeClientHandler();

        if (e.Args.Length > 0)
        {
            handler.ClientStart(e.Args);
        }
    }

当从 PipeServerHandler 向 PipeClienHandler 发送数据时,它运行良好,但是当我从 PipeClientHandler 向 PipeServerHandler 发送数据时,它没有显示任何消息。

clientSenderStream 错误

【问题讨论】:

    标签: c# wpf ipc


    【解决方案1】:

    匿名管道是一种方式。您需要两个匿名管道来进行双向通信。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-09
      • 1970-01-01
      • 2012-07-04
      • 2015-11-16
      • 1970-01-01
      • 2011-09-09
      相关资源
      最近更新 更多