[英]How to communicate between UserControl in MVVM - WPF Application
[英]communicate between the instances of an application
我有一個winforms應用程序,
在關閉按鈕單擊,我將該應用程序隱藏到系統托盤中,就像Skype的工作方式一樣。
如果再次實例化應用程序並且該應用程序的實例已經在運行,那么我想將已經運行的應用程序(可能在托盤中)帶到前面並退出新應用程序。
我想做的就是在使用WCF的Main
mathod中這樣做
Process currentProcess = Process.GetCurrentProcess();
Process[] processes = Process.GetProcesses();
bool running = false;
foreach (var process in processes)
{
if (process.ProcessName == currentProcess.ProcessName
&& process.Id != currentProcess.Id)
{
running = true;
}
}
if (running)
{
ChannelFactory<IService1> pipeFactory = new
ChannelFactory<IService1>(new NetNamedPipeBinding(),
new EndpointAddress("net.pipe://localhost/PipeActivate"));
IService1 pipeProxy = pipeFactory.CreateChannel();
pipeProxy.ActivateThisWindow();
Application.Exit();
}
else
{
using (ServiceHost host = new
ServiceHost(typeof(Form1),
new Uri[] { new Uri("net.pipe://localhost") }))
{
host.AddServiceEndpoint(typeof(IService1),
new NetNamedPipeBinding(), "PipeActivate");
host.Open();
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
host.Close();
}
}
哪里
void IService1.ActivateThisWindow()
{
this.Show();
if (this.WindowState != FormWindowState.Normal)
this.WindowState = FormWindowState.Normal;
this.Activate();
}
現在的問題是,它將運行的實例帶到前面,但是當新實例退出時,它將進入其先前的狀態。
問題是什么? 我怎么解決這個問題?
我可以用什么方法來達到這個要求?
雖然這是一種非常新穎的方法,但它有點矯枉過正。 如此處所示,有一種更容易和更廣泛使用的方法來處理這個問題。
從個人經驗來看,我將這個資源用於我的所有單實例應用程序,它就像一個魅力。
我假設你已經在Form 1類中實現了IService1.ActivateThisWindow,所以這種行為是因為在主機app上為每個請求創建了form1的新實例,並在請求結束時被銷毀。 要在單獨的類中解決問題因素IService1.ActivateThisWindow,因此form1不是主機對象並使form1單例。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.