예제 #1
0
 /// <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 { }
         }
     }
 }
예제 #2
0
        /// <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;
        }