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


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


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

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

Tags:


Thanks:




Виктор

Avatar
Date: 2/17/2016
Reply


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

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


Attach files by dragging & dropping, , or pasting from the clipboard.

loading
clippy