예제 #1
0
        public static void SendCommand(string CommadName)
        {
            //через COM так как там есть объект nanoCAD.State - по нему можно определить занят NC или нет
            nanoCAD.Application NC = null;
            GetAcadApplication.GetNC(ref NC);

            if (NC == null)
            {
                //Обработка ошибки COM
                if (Application.DocumentManager.Count == 0)
                {
                    return;
                }

                var doc0 = Application.DocumentManager.MdiActiveDocument;
                var ed0  = doc0.Editor;

                ed0.WriteMessage("Не удалось получить nanoCAD.Application. Операция прекращена");
                //остановка таймера
                AutosaveCycle.Stop();

                return;
            }

            nanoCAD.Document doc = null;
            if (NC.Documents.Count > 0)
            {
                doc = NC.ActiveDocument;
            }

            if (doc != null)
            {
                //тут надо запускать таймер на предеьное время ожидания, и выходить если оно превышено
                if (WaitIdleNc(ref NC, 300)) //дожидаемся когда NC освободится, 5 минут максимум
                {
                    doc.SendCommand(CommadName);
                }
                else
                {
                    //ждали больше 5 мин и приложение так и не освободилось
                }
            }
        }
예제 #2
0
        public static bool WaitIdleNc(ref nanoCAD.Application NC, int MaxWaitTime)
        {
            var StartTime = DateTime.Now;

            var State = (nanoCAD.State)NC.GetState();

            while (!State.IsQuiescent)
            {
                Thread.Sleep(100);

                var WorkTime = DateTime.Now;

                TimeSpan ts = WorkTime - StartTime;
                int      c  = ts.Seconds;

                if (c > MaxWaitTime)
                {
                    return(false); //если превышено максимальное время ожидания
                }
            }

            return(true); //дождались
        }