← Zurück

Программа не завершается из-за фоновых потоков

Интересно ни кто не сталкивался с проблемой, после закрытия программы оставались фоновые потоки, которые не дают завершиться программе. Проблема с завершением программы возникает после создания окна с графиком 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();

Остается только скриптом убивать процесс в диспетчере задач.

Kommentare (1)

Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen

Виктор
Виктор Autor

Может кому пригодится. Помогло только чудесно сочетание при завершении программы: protected override void OnClosing(CancelEventArgs e) { foreach (var pair in _chartWindows) { pair.Value.DeleteHideable(); pair.Value.Close(); } .... }

т.е. [window].DeleteHideable() перед закрытием окна нужно обязательно произвести.

Mikhail Sukhov