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); // }); }