我正在尝试开发一个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;
}
答案 0 :(得分:0)
通过声明newThread
方面,if
块帮助您将范围扩展到else
部分;所以你可以试试这个,
Thread newThread;
if (this.monitorizing)
{
var dialog = new System.Windows.Forms.FolderBrowserDialog();
//rest of code here
newThread = new Thread(mon.MonitorizeDirectory);
//Rest of code
}
else
{
newThread.Abort();
//Rest of code here
}