WPF线程后台处理程序问题

WPF线程后台处理程序问题,wpf,multithreading,backgroundworker,Wpf,Multithreading,Backgroundworker,我有两个不同的背景线程,他们在我的WPF应用程序中做相似的事情,但时间不同。他们现在都是独立的背景工作者 第一个线程在启动应用程序时运行,它将所有图像从连接的打印机下载到PC位置 第二个线程在我的应用程序中单击某个链接时也会执行相同的操作 由于两个工作线程都是独立的,即使第一个线程的下载进程仍在运行,如果用户单击链接,第二个线程也会开始工作 我想做的是,当用户点击第二个线程时,有什么方法可以让我知道第一个线程的状态吗?我的意思是,如果我知道第一个线程正在做它的工作,那么我甚至不想启动第二个线程。

我有两个不同的背景线程,他们在我的WPF应用程序中做相似的事情,但时间不同。他们现在都是独立的背景工作者

第一个线程在启动应用程序时运行,它将所有图像从连接的打印机下载到PC位置

第二个线程在我的应用程序中单击某个链接时也会执行相同的操作

由于两个工作线程都是独立的,即使第一个线程的下载进程仍在运行,如果用户单击链接,第二个线程也会开始工作

我想做的是,当用户点击第二个线程时,有什么方法可以让我知道第一个线程的状态吗?我的意思是,如果我知道第一个线程正在做它的工作,那么我甚至不想启动第二个线程。当第一个线程由于其他原因被取消时,我只需要第二个线程

我听说过互斥,但我不知道它是如何工作的。如果你知道如何处理这个问题,请分享你的想法和一些例子

谢谢


Dee

我建议您创建一个管理器来处理后台线程。也许是这样的:

interface IDownloadManager
{
    bool IsRunning {get; }
    void Start();
    void Stop();

    event Action DownloadStarted;
    event Action DownloadCompleted;
    event Action<Image> ImageDownloaded;
}

该经理应负责后台工作人员的启动/停止和监控。这样,您就不会启动多个下载进程。

在BackgroundWorker线程中,有一个名为RunWorkerCompleted的事件,它可以判断第一个线程是否完成,也可以判断第一个线程是否已取消。基于,您可以启动第二个线程;,或者,在我的主表单代码中,后台工作人员的完成事件将其设置为false,然后在单击链接时进行检查。为什么一开始就使用线程?没有CPU处理。甘尼什,我有两个完全独立的班级。RunWorkerCompleted在第一个类中触发,但当用户单击链接时,其他类如何知道哪个只是模型,初始后台线程仍在运行或完成。如果我首先不使用后台工作程序,则在从打印机下载图像之前,应用程序甚至不会启动。图像如果有1000个图像怎么办。