У меня есть WinForms приложение,связи между экземплярами приложения
На Закрыть кнопку мыши, я прячусь, что приложение в системный трей, как и как скайп работает ..
Если приложение инстанциируется снова и если экземпляр этого приложения уже запущен, то я хочу запустить уже запущенное приложение (может быть в лотке) на передний план и выйти из нового.
Что я думаю о том, чтобы сделать что-то подобное в Main
mathod с использованием WCF
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();
}
теперь проблема, ее приведение запущенного экземпляра фронт, но как новые выходы, например, его собираются в прежнее состояние.
В чем проблема? Как я могу это решить?
Какие другие способы я могу использовать для достижения этого требования?
Почему вы пытаетесь иметь дело с несколькими экземплярами. Процесс Skype не заканчивается, когда он отправляется на системную панель. –
Я также не заканчиваю при отправке в системную панель .. – dotNETbeginner