Проверьте состояние процесса

В то время как есть возможность «выйти» из другого потока в поток пользовательского интерфейса, используя Dispatcher или SynchronizationContext, я настоятельно рекомендую этого не делать. Это потому, что это делает вашу логику менее тестируемой и более привязанной к ее среде. В случае Dispatcher он сильно привязан к работе в среде WPF; SynchronizationContext лучше, но он все еще привязан к работе в какой-то среде.

При таком подходе у вас есть зависимость от вашей логики до потока пользовательского интерфейса, например:

Код пользовательского интерфейса => фоновая логика потока => Поток пользовательского интерфейса

Вместо этого используйте IProgress<T> и Progress<T> из фоновой логики потока, чтобы сообщать отчеты о ходе выполнения своему вызывающему, который решает, как отображать эти отчеты о ходе выполнения. Тогда ваша зависимость выглядит следующим образом:

UI code => логика фонового потока

и ваша логика фонового потока не зависит от наличия потока UI. Это делает его более убедительным и более тестируемым.

8
задан Niklas Winde 26 November 2008 в 13:06
поделиться

2 ответа

Все, в чем Вы нуждаетесь, находится в Системе. Диагностика, например: проверять, отвечает ли процесс.

using System;
using System.Diagnostics;

namespace ProcessStatus
{
    class Program
    {
        static void Main(string[] args)
        {
            Process[] processes = Process.GetProcesses();

            foreach (Process process in processes)
            {
                Console.WriteLine("Process Name: {0}, Responding: {1}", process.ProcessName, process.Responding);
            }

            Console.Write("press enter");
            Console.ReadLine();
        }
    }
}
11
ответ дан 5 December 2019 в 15:27
поделиться

См. "не отвечающий" сообщение в Windows Form Applicati в программном обеспечении ручья вуали

0
ответ дан 5 December 2019 в 15:27
поделиться