C# 告诉同一个.net应用程序它';它已经在运行了

C# 告诉同一个.net应用程序它';它已经在运行了,c#,.net,wpf,process,mutex,C#,.net,Wpf,Process,Mutex,我有一个WPF应用程序,我在电脑启动时会启动隐藏窗口,所以它就像后台任务一样工作。它有时会与某个网站同步,当它发现有新的日期时,会显示一个弹出窗口。用户还应该能够以启动新应用程序的方式显示标准GUI。我可以通过新应用程序中的互斥检测到它是新的,我不想要它,并将关闭它,但我不知道如何告诉旧应用程序它应该显示GUI。你知道怎么做吗?我不需要发布一些字符串或类似的东西,我只需要在旧应用程序中执行某个方法。您可以使用此API调用向其发送Windows消息。然后在隐藏的背景应用程序中,您可以检查此消息,并

我有一个WPF应用程序,我在电脑启动时会启动隐藏窗口,所以它就像后台任务一样工作。它有时会与某个网站同步,当它发现有新的日期时,会显示一个弹出窗口。用户还应该能够以启动新应用程序的方式显示标准GUI。我可以通过新应用程序中的互斥检测到它是新的,我不想要它,并将关闭它,但我不知道如何告诉旧应用程序它应该显示GUI。你知道怎么做吗?我不需要发布一些字符串或类似的东西,我只需要在旧应用程序中执行某个方法。

您可以使用此API调用向其发送Windows消息。然后在隐藏的背景应用程序中,您可以检查此消息,并显示您的UI:

[DllImport("User32.dll")]
public static extern Int32 SendMessage(int hWnd, int Msg, int wParam, [MarshalAs(UnmanagedType.LPStr)] string lParam);
在后台应用程序窗体中,覆盖WndProc处理程序:

protected override void WndProc(ref Message msg)
    {
        // filter messages here for your purposes
        if (msg.wParam = MY_MESSAGE_CONSTANT) { ShowUI(); } 
        base.WndProc(ref msg);
    }
另一种方法是使用FileSystemWatcher对象,并在磁盘上某处查看文件夹。第一个应用程序可以在那里创建一个文件,您的后台应用程序将收到通知并显示其UI


我不需要发布一些字符串或类似的东西,我只需要在旧版应用程序中执行某个方法。
也许你应该这样做。你可以设置一个套接字并通过该套接字发送消息。抱歉,但我真的不知道该放在哪里。当我复制粘贴到MainWindow.xaml.cs中时,这只是一个错误块。将其粘贴到MainWindow.xaml.cs文件中:受保护的覆盖void OnSourceInitialized(EventArgs e){base.OnSourceInitialized(e);HwndSource=PresentationSource.FromVisual(this)作为HwndSource;source.AddHook(WndProc)}私有IntPtr-WndProc(IntPtr-hwnd,int-msg,IntPtr-wParam,IntPtr-lParam,ref-bool-handled){//处理消息…返回IntPtr.Zero;}好的,完成了,如何使用它?我需要从App.g.cs发送一条消息,并在某处捕获它;一直工作的静态DB类将处于空闲状态。