private void AsyncOperation(object state) { AsyObject obj = (AsyObject)state; bool b = obj.ex.exportExcel(obj.model); obj.doevent.Set(); worker.ReportProgress(0); }
void worker_DoWork(object sender, DoWorkEventArgs e) { List <string[]> cards = us.GetCards(); this.Invoke((MethodInvoker) delegate { this.progressBar1.Maximum = cards.Count; this.progressBar1.Minimum = 0; this.progressBar1.Value = 0; }); List <Model> ModelList = new List <Model>(); for (int i = 0; i < cards.Count; i++) { ModelList.Add(us.GetModel(cards[i][0], cards[i][1])); worker.ReportProgress(i + 1); } if (ModelList.Count > 0) { this.Invoke((MethodInvoker) delegate { this.progressBar1.Maximum = ModelList.Count; this.progressBar1.Minimum = 0; this.progressBar1.Value = 0; }); excel ex = new excel(ModelFile); List <ManualResetEvent> manualEvents = new List <ManualResetEvent>(); for (int i = 0; i < ModelList.Count; i++) { AsyObject obj = new AsyObject(); obj.model = ModelList[i]; obj.ex = ex; ManualResetEvent ma = new ManualResetEvent(false); manualEvents.Add(ma); obj.doevent = ma; ThreadPool.QueueUserWorkItem(AsyncOperation, obj); if (manualEvents.Count >= 60) { WaitHandle.WaitAll(manualEvents.ToArray()); manualEvents.Clear(); } } if (manualEvents.Count > 0) { WaitHandle.WaitAll(manualEvents.ToArray()); } e.Result = ex.exportDir; } }