void ThreadMain(object readyEvent) { var ddeCallback = new DDEML.DdeCallback(this.DdeCallback); try { dispatcher = Dispatcher.CurrentDispatcher; int res = DDEML.DdeInitialize(ref idInst, ddeCallback, DDEML.APPCMD_CLIENTONLY, 0); if (res != DDEML.DMLERR_NO_ERROR) { var err_no = DDEML.DdeGetLastError(idInst); string error = DDEML.GetErrorString(err_no) + " (" + err_no.ToString() + ")"; Log.Emit("dde-init-err", "error", error); InitializationMessage = error; idInst = 0; } else { Log.Emit("dde-init-ok", "id", idInst); InitializationMessage = "OK"; } (readyEvent as AutoResetEvent).Set(); Dispatcher.Run(); } catch (Exception e) { Log.Emit("dde-thread-exception", "exception", e); foreach (var kv in conversations) { try { kv.Value.Disconnect(); } catch (Exception e2) { Log.Emit("dde-thread-exception", "exception", e2); } } } GC.KeepAlive(ddeCallback); }
void ThreadMain(object readyEvent) { var ddeCallback = new DDEML.DdeCallback(this.DdeCallback); try { dispatcher = Dispatcher.CurrentDispatcher; int res = DDEML.DdeInitialize(ref idInst, ddeCallback, DDEML.APPCMD_CLIENTONLY, 0); if(res != DDEML.DMLERR_NO_ERROR) { var err_no = DDEML.DdeGetLastError(idInst); string error = DDEML.GetErrorString(err_no) + " (" + err_no.ToString() + ")"; Log.Emit("dde-init-err", "error", error); InitializationMessage = error; idInst = 0; } else { Log.Emit("dde-init-ok", "id", idInst); InitializationMessage = "OK"; } (readyEvent as AutoResetEvent).Set(); Dispatcher.Run(); } catch(Exception e) { Log.Emit("dde-thread-exception", "exception", e); foreach(var kv in conversations) { try { kv.Value.Disconnect(); } catch(Exception e2) { Log.Emit("dde-thread-exception", "exception", e2); } } } GC.KeepAlive(ddeCallback); }