启动/停止后台功能

时间:2015-10-07 10:10:24

标签: c# wpf

我正在尝试开发一个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;
}

1 个答案:

答案 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 
  }