C# 启动/停止后台功能

C# 启动/停止后台功能,c#,wpf,C#,Wpf,我正在尝试开发一个WPF应用程序,当按下一个按钮时,它在后台运行其他进程(当再次按下同一个按钮时停止) 这里的重点是,我调用它的过程将监视一个文件夹,因此,它不会在任何点结束 我尝试了线程,但是当我按下按钮创建一个新的线程对象时,当我再次按下它时,我无法访问它,因为有不同的代码块 我认为更好的方法是使用,但我不知道如何使用它 这是我现在掌握的代码mon是创建的具有我希望在后台运行的函数的对象(mon.MonitoricDirectory) 通过在newThread外部声明if块,帮助您将is范围

我正在尝试开发一个WPF应用程序,当按下一个按钮时,它在后台运行其他进程(当再次按下同一个按钮时停止)

这里的重点是,我调用它的过程将监视一个文件夹,因此,它不会在任何点结束

我尝试了线程,但是当我按下按钮创建一个新的线程对象时,当我再次按下它时,我无法访问它,因为有不同的代码块

我认为更好的方法是使用,但我不知道如何使用它

这是我现在掌握的代码
mon
是创建的具有我希望在后台运行的函数的对象(
mon.MonitoricDirectory


通过在
newThread
外部声明
if
块,帮助您将is范围扩展到
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 
  }

你回答了你自己的问题。在方法外部(类内部)设置值。您是否查看过任务并行库中的任务取消?现在取消异步工作@Polyfun的黄金标准更好了吗?这个节目是西班牙语的,所以请原谅我的英语。无意冒犯,你的英语比我的西班牙语好得多;-)。但据我所知,FileSystemWatcher不需要额外的线程。如果要停止它,只需将EnableRaisingEvents设置为false或dispose即可。这是如何工作的?它实现了什么?这在事件处理程序中是否有效?必须在方法外部声明,否则它仍然不会执行任何操作。事实上,它会在这里给出一个NPE。
  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 
  }