Вызов метода для запуска в фоновом режиме, который все еще позволяет пользователю работать в форме - PullRequest
0 голосов
/ 29 апреля 2018

В моем основном классе у меня есть список объектов с элементом данных DateTime. У меня также есть метод, который перебирает этот список и проверяет его членов на текущий DateTime. Я знаю, что могу использовать таймер для вызова этого метода каждый интервал. Однако метод будет вызываться очень часто (т. Е. Интервал очень короткий), и он будет блокировать выполнение пользователем чего-либо еще. Я хочу, чтобы пользователь мог взаимодействовать с формой, когда метод работает в фоновом режиме. Тем не менее, если метод находит совпадение в своем цикле, я хочу, чтобы форма создала другую форму сообщения об ошибке и остановила все остальное, пока оно не будет обработано. Что мне нужно знать, так это как заставить метод постоянно вызываться в фоновом режиме, чтобы он выпрыгивал на передний план и останавливал все остальное, если что-то происходит.

Ответы [ 3 ]

0 голосов
/ 29 апреля 2018

Для этого вам нужно будет использовать многозадачность.

Как начинающий и работающий в Windows Forms, я обычно советую для BackgroundWorker. Это прерывание немного сложнее.

Работа с пользовательским интерфейсом из другого потока очень сложная, однако . Но я полагаю, что вы можете отменить событие DoWork BGW (с сообщением об ошибке аппирации) и затем отобразить модальное диалоговое окно (любая форма с ShowDialog ()), чтобы заблокировать входные данные из события RunWorkerCompleted.

0 голосов
/ 29 апреля 2018

Асинхронный подход поможет

private async Task DoJob()
{
    while (true) // or loop through DateTime values
    {
        await Task.Delay(1000): // 1 second
        if (DateTime.Now == dateTimeValue)
        {
            using (var form = new ErrorForm())
            {
                form.ShowDialog();
            }
        }

        // Possible condition for exit from while loop
    }
}

При асинхронном ожидании выполнение останется в основном потоке, что дает вам возможность отображать сообщение об ошибке без проблем доступа к пользовательскому интерфейсу из другого потока.

0 голосов
/ 29 апреля 2018

Вы можете использовать фонового работника .

Вы можете получить результаты по завершении, а также получить результаты в событии хода выполнения отчетов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...