← Zurück

Основной поток не завершается при закрытии программы

Доброго дня. Если запускаю проект, вывожу на график, а потом закрываю окно, то срабатывает безопасное отключение, основной поток останавливается. А вот если запускаю проект, потом запускаю стратегию и следом закрываю окно, или останавливаю стратегию, а потом закрываю окно, то основной поток не останавливается. Я добавил в основной код следующий раздел, но это не помогает...

protected override void OnClosing(CancelEventArgs e)
        {
            try
            {
                if (_levelSarStrategy != null)
                {
                    _levelSarStrategy.Stop();
                }
            }
            catch (Exception exc)
            {
                MessageBox.Show(exc.ToString());
            }
            base.OnClosing(e);
        }

Что еще можно придумать?..

War dieses Thema hilfreich?

Thema teilen

Kommentare (11)

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

IvanB
IvanB

UsilaDobry: Доброго дня. Если запускаю проект, вывожу на график, а потом закрываю окно, то срабатывает безопасное отключение, основной поток останавливается. А вот если запускаю проект, потом запускаю стратегию и следом закрываю окно, или останавливаю стратегию, а потом закрываю окно, то основной поток не останавливается. Я добавил в основной код следующий раздел, но это не помогает...

protected override void OnClosing(CancelEventArgs e)
        {
            try
            {
                if (_levelSarStrategy != null)
                {
                    _levelSarStrategy.Stop();
                }
            }
            catch (Exception exc)
            {
                MessageBox.Show(exc.ToString());
            }
            base.OnClosing(e);
        }

Что еще можно придумать?..

Можно попробовать вызвать метод Dispose у стратегии при закрытии окна.

UsilaDobry
UsilaDobry
UsilaDobry Autor

IvanB: Можно попробовать вызвать метод Dispose у стратегии при закрытии окна.

Добавил в этот код, первые два запуска нормально, потом опять перестал основной поток останавливаться.

protected override void OnClosing(CancelEventArgs e)
        {
            try
            {
                if (_levelSarStrategy != null)
                {
                    _levelSarStrategy.Stop();
                    _LevelSarStrategy.Dispose();
                }
            }
            catch (Exception exc)
            {
                MessageBox.Show(exc.ToString());
            }
            base.OnClosing(e);
        }
IvanB
IvanB

UsilaDobry:

IvanB: Можно попробовать вызвать метод Dispose у стратегии при закрытии окна.

Добавил в этот код, первые два запуска нормально, потом опять перестал основной поток останавливаться.

protected override void OnClosing(CancelEventArgs e)
        {
            try
            {
                if (_levelSarStrategy != null)
                {
                    _levelSarStrategy.Stop();
                    _LevelSarStrategy.Dispose();
                }
            }
            catch (Exception exc)
            {
                MessageBox.Show(exc.ToString());
            }
            base.OnClosing(e);
        }

Какие-то ресурсы не освобождаются ... В поиске проблемы может помочь ANTS Memory Profiler или dotTrace.

UsilaDobry
UsilaDobry
UsilaDobry Autor

IvanB: В поиске проблемы может помочь ANTS Memory Profiler или dotTrace.

ANTS 495$, а dotTrace 599$...дешевле ничего нет? 😳 Вспомогательные программы, а стоят как студия...

Скачал ANTS триальную версию на 14 дней...теперь бы еще понять как ей пользоваться, я то в англицком ни бум-бум...

IvanB
IvanB

UsilaDobry: ANTS 495$, а dotTrace 599$...дешевле ничего нет? 😳 Вспомогательные программы, а стоят как студия...

Скачал ANTS триальную версию на 14 дней...теперь бы еще понять как ей пользоваться, я то в англицком ни бум-бум... Можете прислать проект, я по возможности, посмотрю.

UsilaDobry
casper-ss
casper-ss

Такая же проблема...замучился через диспетчер программ процесс убивать...как с ним бороться?весь код перепроверил, все равно после запуска стратегии висит процесс(редко бывает когда благополучно завершается, но бывает)...я так понял это баг библиотеки?

Самунджян Артем

casper-ss: Такая же проблема...замучился через диспетчер программ процесс убивать...как с ним бороться?весь код перепроверил, все равно после запуска стратегии висит процесс(редко бывает когда благополучно завершается, но бывает)...я так понял это баг библиотеки? Это связано с потоком окна дополнительного (менеджер стратегий или логирование). Решается это следующим образом


//переопределяем метод закрытия основного окна
protected override void OnClosing(CancelEventArgs e)
		{//закрываем все дополнительные окна
                 //отключаем функцию "сложения при нажатии на крест"
                 _tradesWindow.DeleteHideable();
                 //окончательно закрываем окно
                 _tradesWindow.Close();
		}

До этого соответсвенно (к примеру в конструкторе основного окна):


public MainWindow()
		{
			InitializeComponent();
                 _tradesWindow.MakeHideable();
                }

По сути, что получается. Приложение ваше закрыватся (основное окно), но процесс не убивается. Из-за того что дополнительное окно как бы сложено (не путать с визуальным сложением). Чтобы основной процесс закрылся, нужно, чтобы все исходящие из него, аналогично были закончены.

Код, который я привел можно посмотреть в Samples/Quik/Sample. Там огромное количество дополнительных окон 😀

casper-ss
casper-ss

Самунджян Артем:

casper-ss: Такая же проблема...замучился через диспетчер программ процесс убивать...как с ним бороться?весь код перепроверил, все равно после запуска стратегии висит процесс(редко бывает когда благополучно завершается, но бывает)...я так понял это баг библиотеки? Это связано с потоком окна дополнительного (менеджер стратегий или логирование). Решается это следующим образом

//переопределяем метод закрытия основного окна protected override void OnClosing(CancelEventArgs e) {//закрываем все дополнительные окна //отключаем функцию "сложения при нажатии на крест" _tradesWindow.DeleteHideable(); //окончательно закрываем окно _tradesWindow.Close(); }

> До этого соответсвенно (к примеру в конструкторе основного окна):
> ```csharp

public MainWindow()
		{
			InitializeComponent();
                 _tradesWindow.MakeHideable();
                }

По сути, что получается. Приложение ваше закрыватся (основное окно), но процесс не убивается. Из-за того что дополнительное окно как бы сложено (не путать с визуальным сложением). Чтобы основной процесс закрылся, нужно, чтобы все исходящие из него, аналогично были закончены.

Код, который я привел можно посмотреть в Samples/Quik/Sample. Там огромное количество дополнительных окон 😀

Неее...не из за этого...я это все сразу проверил...все окна закрываюся, причем с очередью закрытия тоже все в порядке...весит какой то другой процесс...и тот который связан со стратегией...потому что такая проблема возникает только после нажатия кнопки старт, и то не всегда, 3-4 раза процесс остается активным и 1 раз закрывается...вот так...

Самунджян Артем

casper-ss: Неее...не из за этого...я это все сразу проверил...все окна закрываюся, причем с очередью закрытия тоже все в порядке...весит какой то другой процесс...и тот который связан со стратегией...потому что такая проблема возникает только после нажатия кнопки старт, и то не всегда, 3-4 раза процесс остается активным и 1 раз закрывается...вот так...

присылайте проект на lesson@stocksharp.com! Надеюсь ничего секретного в стратегии нет 😀

casper-ss
casper-ss

Самунджян Артем:

casper-ss: Неее...не из за этого...я это все сразу проверил...все окна закрываюся, причем с очередью закрытия тоже все в порядке...весит какой то другой процесс...и тот который связан со стратегией...потому что такая проблема возникает только после нажатия кнопки старт, и то не всегда, 3-4 раза процесс остается активным и 1 раз закрывается...вот так...

присылайте проект на lesson@stocksharp.com! Надеюсь ничего секретного в стратегии нет 😀

Увы...есть...точнее не я один собственник идеи...:))))не могу ей распоряжаться один...:)

Самунджян Артем

casper-ss: Увы...есть...точнее не я один собственник идеи...:))))не могу ей распоряжаться один...:) Возможно ошибку получиться отловить без стратегии!