Beispiel #1
0
        private void AsyncOperation(object state)
        {
            AsyObject obj = (AsyObject)state;
            bool      b   = obj.ex.exportExcel(obj.model);

            obj.doevent.Set();
            worker.ReportProgress(0);
        }
Beispiel #2
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;
            }
        }