/// <summary> /// 方案一:每次分配任务打开一个cad,任务结束停止cad /// </summary> private void thread_manager() { //progressNum.num = 0; //AcadApplication app1; //app1 = NewCAD(); while (true) { bool progress_islock = false; while(!progress_islock){ try { progress_islock = Monitor.TryEnter(progressNum); if (progress_islock) { if (progressNum.num < 1) { bool queue_islock = false; while (!queue_islock) { try { queue_islock = Monitor.TryEnter(queue); if (queue_islock) { if (0 != queue.Count) { mulInfo task = (mulInfo)queue.Dequeue(); ParameterizedThreadStart test = new ParameterizedThreadStart(Thread_print); Thread a = new Thread(test); a.Start(task); } Monitor.Exit(queue); } } catch { } } } Monitor.Exit(progressNum); Thread.Sleep(500); } } catch { } } } }
/// <summary> /// 打印线程,可传入参数 /// </summary> /// <param name="obj"></param> private void Thread_print(object obj) { bool islock = false; while (!islock) { try { islock = Monitor.TryEnter(progressNum); if (islock) { progressNum.num++; Monitor.Exit(progressNum); } } catch { } } AcadDocument drawing=null; mulInfo str=(mulInfo)obj; AcadApplication app = NewCAD(); string[] PrintNames_inThread = str.Files; foreach (string fname in PrintNames_inThread) { bool isFinish = false; while (!isFinish) { try { app.Documents.Open(fname,true); isFinish = true; } catch { isFinish = false; } } //防止AutoCAD响应慢,上一步还未响应程序就开始下一步命令,不断try直到成功执行 isFinish = false; while (!isFinish) { try { drawing = app.ActiveDocument; isFinish = true; } catch { isFinish = false; } } isFinish = false; while (!isFinish) { try { drawing.SetVariable("BACKGROUNDPLOT", 0); drawing.ActiveLayout.CenterPlot = true;//居中 drawing.ActiveLayout.ConfigName = str.Selected_Printer; drawing.ActiveLayout.UseStandardScale = true; drawing.ActiveLayout.StandardScale = AcPlotScale.acScaleToFit; drawing.ActiveLayout.PlotType = AcPlotType.acExtents; drawing.ActiveLayout.CanonicalMediaName = str.Selected_Paper; isFinish = true; } catch { isFinish = false; } } #region 截取文件名 string[] dwgFullName = fname.Split('\\'); string[] dwgName = dwgFullName[dwgFullName.Length - 1].Split('.'); string pureName = null; for (int i = 0; i < dwgName.Length - 2; i++) { pureName += dwgName[i]; pureName += "."; } pureName += dwgName[dwgName.Length - 2]; string SaveFileName = str.SaveAddr + "/" + pureName; //drawing.SaveAs("C:/Users/JabinGuo/Desktop/convert", AcSaveAsType.ac2007_dxf); #endregion islock = false; while (!islock) { try { islock = Monitor.TryEnter(drawing); } catch { //此处测试过exception } } bool isfinish = false; while (!isfinish) { try { isfinish = drawing.Plot.PlotToFile(SaveFileName); } catch { } } Monitor.Exit(drawing); drawing.Close(false); } app.Quit(); islock = false; while (!islock) { try { islock = Monitor.TryEnter(progressNum); if (islock) { progressNum.num--; } } catch (Exception e) { MessageBox.Show(e.Message); } }Monitor.Exit(progressNum); return; //button_FindFile.Enabled = true; }