Member 11288733 Ответов: 1

C# application.restart() в задаче


Привет

Приложение.Restart(); не работает в методе задачи
Закрытое приложение, но не запускаемое снова автоматически

Что я уже пробовал:

I Have this Code Block 

<pre lang="c#">Task.Delay(ts).ContinueWith((x) =>
                {
                    bool updateSuccess = checkUpdate2();
                    if (updateSuccess)
                    {
                        restart();
                    }
                    else
                    {
                        notifyIcon1.ShowBalloonTip(3000, "UPDATE", "No current updates found", ToolTipIcon.Info);
                        Thread.Sleep(3000);
                    }
                });


public void restart()
        {
            try
            {
                this.scannerService.Stop();
                this.travelDocumentScannerService.Stop();
                this.printerService.Stop();
                MessageBox.Show("Servisler Stopped");

                this.mouseThread.Abort();
                MessageBox.Show("Thread closed");

                Thread.Sleep(3000);

                Application.Restart();
            }
            catch (Exception ex)
            {
                var f = ApplicationDeployment.CurrentDeployment.DataDirectory +@"\RestartError.txt";
                var err = "Message :" + ex.Message + "<br/>" + Environment.NewLine + "StackTrace :" + ex.StackTrace +
   "" + Environment.NewLine + "Date :" + DateTime.Now.ToString();
                if (!File.Exists(f))
                {
                    File.WriteAllText(f, err);
                }
                else
                {
                    File.AppendAllText(f, err);
                }
            }
        }



Все идет хорошо но после звонка
Application.Restart();
Приложение закрыто и не запускается автоматически и не дает исключений тоже

если я запускаю метод restart() ручной код работает нормально и перезапускает приложение, но когда он запускается в задаче, он не работает

где я делаю ошибку?

1 Ответов

Рейтинг:
2

OriginalGriff

Насколько мне известно, Вы не можете сделать заявление.Перезапуск за исключением основного потока - потому что часть операции перезапуска включает в себя закрытие форм, и это приведет к завершению всех подпотоков, которые открыло приложение. Когда поток закрывается, под-поток завершается, и он не попадает в код, который запускает новый экземпляр, чтобы заменить его.

Три решения:
1) вызовите перезапуск из основного потока вместо подпотока.
2) Попробуйте Процесс.запуск приложения.ExecutablePath), подождите немного, а затем закройте приложение.
3) Найдите более изящный способ раскрутить свое приложение - перезапуск почти наверняка является клуджем!