Интересно ни кто не сталкивался с проблемой, после закрытия программы оставались фоновые потоки, которые не дают завершиться программе. Проблема с завершением программы возникает после создания окна с графиком work_wnd = new ChartWindow { Title = "{0} {1} {2}".Put(work_series.Security.Code,work_series.CandleType.Name, work_series.Arg)}; создавал также окно через _chartWindows.SafeAdd(work_series, key => .show(); результат тот же.
В отладчике прерывал фоновый поток, который всегда останавливается на: StockSharp.Messages.InMemoryMessageChannel, класс BlockingPriorityQueue, public void Open() ThreadingHelper .Thread(() => CultureInfo.InvariantCulture.DoInCulture(() => {while (!_messageQueue.IsClosed) }.
Так понимаю, чтобы завершить этот поток нужно вызвать public void Close() {_messageQueue.Close();}
Пробовал и work_wnd.Close(); work_wnd.DoDispose(); this.Close(); this.DoDispose(); Отписывался от всех событий и Trader.Dispose();
Остается только скриптом убивать процесс в диспетчере задач.
评论 (1)
登录 或 创建账户, 登录或注册以发表评论
Может кому пригодится. Помогло только чудесно сочетание при завершении программы: protected override void OnClosing(CancelEventArgs e) { foreach (var pair in _chartWindows) { pair.Value.DeleteHideable(); pair.Value.Close(); } .... }
т.е. [window].DeleteHideable() перед закрытием окна нужно обязательно произвести.