Пример #1
0
        public ExcelDDEManager()
        {
            System   = new object();
            Encoding = Encoding.GetEncoding("windows-1251");

            m_connections = new ConcurrentDictionary <object, Connection>();
            m_commands    = new ConcurrentQueue <Command>();
            m_terminate   = new ManualResetEvent(false);
            m_complete    = new AutoResetEvent(false);

            // запуск потока экспорта DDE, все системные вызовы DDE должны делаться в контексте одного потока!
            m_threadForProcess = CoreHelper.GetThread(() =>
            {
                try
                {
                    // подключение и все дальнейшие команды dde должны выполнятся в одном и том же потоке!
                    m_DDECallBack = new DDEML.DDECallBackDelegate(DDECallBack);
                    DDEML.DdeInitialize(ref m_idInst, m_DDECallBack, DDEML.APPCMD_CLIENTONLY, 0);

                    do
                    {
                        RefreshData();
                    } while (!m_terminate.WaitOne(AppConfig.Common.ExcelExportRefreshDelay));
                }
                catch (Exception e)
                {
                    LogFileManager.AddError("DDE export", e);
                }
            }, true, "Excel DDE processing");
            m_threadForProcess.SetApartmentState(ApartmentState.STA);
            m_threadForProcess.Start();

            //DDECompletitionManager.Instance.Post(() =>
            //    {
            //        m_DDECallBack = new DDEML.DDECallBackDelegate(DDECallBack);
            //        DDEML.DdeInitialize(ref m_idInst, m_DDECallBack, DDEML.APPCLASS_STANDARD, 0);
            //    });
        }