public MainWindow() { InitializeComponent(); for (int i = 0; i < 10; i++) { IonJob job = new IonJob(); job.ID = i; job.Name = i.ToString(); job.Status = GeoFun.MultiThread.enumJobStatus.New; job.MaxProgressValue = 100; job.ProgressValue = i * 5; job.Log = i.ToString(); JobList.Add(job); jobQueue.Enqueue(job); } dgJobs.ItemsSource = JobList; for (int i = 0; i < MaxTaskNum; i++) { IonWorker ionw = new IonWorker(); ionw.Code = i; ionw.OnStatusChanged += worker_FinishedJob; Worker worker = ionw as Worker; worker.Status = enumWorkerStatus.Working; workers.Add(ionw); worker.Status = enumWorkerStatus.Idle; } }
private void worker_FinishedJob(object sender, EventArgs e) { if (sender is null) { return; } IonWorker worker = sender as IonWorker; if (worker is null) { return; } if (worker.Status == enumWorkerStatus.Working) { return; } Job job = ApplyJob(); worker.MyJob = job as IonJob; worker.Work(); }