Я пытаюсь разработать приложение WPF, которое запускает другой процесс в фоновом режиме при нажатии кнопки (и останавливает его, когда одна и та же кнопка снова нажата).Запуск/остановка фоновой функции
Ну, дело в том, что процесс, который я называю, будет отслеживать папку, поэтому она не заканчивается ни в какой точке.
Я попытался с Threads, но когда я создаю новый объект потока, когда я нажимаю кнопку, я не могу получить к нему доступ, когда я нажимаю его снова, потому что есть разные кодовые блоки.
Я поехал, что лучший способ сделать это - использовать BackgroundWorker, но я не понимаю, как его использовать.
Это код, который у меня есть прямо сейчас. mon
является созданным объектом, который имеет функцию, что я хочу работать в фоновом режиме (mon.MonitoriceDirectory
)
if (this.monitoring)
{
var dialog = new System.Windows.Forms.FolderBrowserDialog();
dialog.ShowNewFolderButton = false;
System.Windows.Forms.DialogResult result = dialog.ShowDialog();
if (dialog.SelectedPath != "")
{
monitorizeButton.Content = "Stop";
textBlockMonitorize.Text = "Monitoring...";
this.monitorizando = false;
mon.monitorizePath = dialog.SelectedPath;
Thread newThread = new Thread(mon.MonitorizeDirectory);
newThread.Start();
}
}
else
{
newThread.Abort(); // Here is the problem, I can't access to that cuz
// it's in another codeblock.
monitorizeButton.Content = "Monitorice";
textBlockMonitorize.Text = "Ready";
this.monitorizando = true;
}
Вы ответили на собственный вопрос. Задайте значение вне метода (внутри класса). – kevintjuh93
Вы посмотрели на аннулирование задачи с помощью параллельной библиотеки задач? Это текущий золотой стандарт для отмены асинхронной работы https://msdn.microsoft.com/en-us/library/dd997396%28v=vs.110%29.aspx – Gusdor
@Polyfun Теперь лучше? Программа на испанском языке, поэтому извините меня 4 моего английского. –