【问题标题】:C# reinvoke current methodC# 重新调用当前方法
【发布时间】:2012-02-28 16:52:18
【问题描述】:

不太确定如何执行此操作,或者它是否是编写 c# 的正确方法。也许我需要重新考虑我要做什么,但我需要一些帮助。

我有一个 wpf 应用程序,它启动/停止服务,还使用命名管道打开端口并与服务通信。因此,当服务需要时,它可以向应用程序发送消息。我启动了一个新线程来调用位于 namedPipeServerStream.WaitForConnection() 的 Wait() 方法。这工作正常,但是当服务停止时,我向应用程序发送一条消息,因此它会中断 WaitForConnection,但是我不想杀死这个线程,我想重新调用相同的方法并循环等待,直到服务再次启动。不确定执行此操作的最佳方法。

我目前的代码如下。

void Wait()
{
    while (!ServiceControl.ServiceRunning)
    {
        Thread.Sleep(250);
        if (exitProgram == true)
        {
            break;
        }
    }

    while (ServiceControl.ServiceRunning)
    {
        try
        {
            NamedPipeServerStream namedPipeServerStream = new NamedPipeServerStream("pipeName");
            namedPipeServerStream.WaitForConnection();
            byte[] buffer = new byte[255];
            namedPipeServerStream.Read(buffer, 0, 255);
            string request = ASCIIEncoding.ASCII.GetString(buffer);

            if (request != null)
            {
                if (request == "pipeExit") 
                {
                    Wait(); //Reinvoke Wait if svc calls to exit
                } 

                else
                {
                    //Do work on message
                }
            }
            namedPipeServerStream.Close();
        }
        catch (Exception){}
    }

    if (_opener.exitProgram == true)
    {
        Application.Current.Dispatcher.InvokeShutdown();
    }

【问题讨论】:

    标签: c# windows-services while-loop named-pipes


    【解决方案1】:

    为什么不在整个 Wait 实现中加上 while(!opener.exitProgram)?这样,一旦管道关闭,您将回到起点。

    【讨论】:

    • 哈哈,这很容易。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多