2015-08-06 6 views
0

Я пытался изменить приложение, разработанное с другом в прошлом ...Threading ... начать/приостановить ..set/сброс

это приложение делает онлайн-торговли (с использованием API разработан для C#) .. так в основном у меня есть структура приложения, где я установил несколько параметров конфигурации, которые пользователь может проверить или снять, и есть кнопка запуска и остановки

при нажатии кнопки запуска. Я создаю поток, передавая функцию, которая будет выполнять все подпитки и другие и присвоение его основной форме класс

betbot _mybot = this; # mybot is form class 
this.main_thread = new Thread(new ThreadStart(_mybot.aping_function); 
this.main_thread.Start(); 

и нажав кнопку остановки ,,, приложение просто подвешивание нити

this.main_thread.Suspend() 

теперь останавливается приложение и единственный путь для возобновления работы приложения (подражания) должны нажать кнопку запуска и возобновить нить ..

в новой функции, я хочу эту нить, чтобы остановить и перезапустить автоматически ..every время он попадает определенный стоп-лосс и начать все сначала ... но я не мог сделать это

, что я устал это ManualResetEvent, как после

private static ManualResetEvent mrse = new ManualResetEvent(true); 

когда определенное событие совпадает в методе aping_function я делать mrse.reset() и mrse.set() .. но это, похоже, не влияет (не перезапуск полностью)

if (stop_loss_condition_met) 
{ 
    this.Print1("Bot Is stopped Automatically"); 
    mrse.Reset(); 
    this.Print1("Bot Is re-started Automatically"); 
    mrse.Set(); 
} 

, как я могу добиться этого

ответ

0

Вы должны добавить вызов метода WaitOne в том месте, где остановлен рабочий поток.

mrse.WaitOne() 

в следующий раз, когда внешний код сброса его вызова

mrse.Reset() 

выполнение будет остановлено, и поток будет идти спать в точке

mrse.WaitOne() 

до внешнего кода вызова Set метод ManualResetEvent

mrse.Set() 
+0

Итак, я со своей aping_function создаю какое-то время (true) {mrse.WaitOne(), а затем внутри моего условия if, если я сделаю mrse.reset() и mrse.set() в том же порядке ..next. Далее ... поток остановится там и перезапустится с линии WaitOne..правленно? – MrPandav

+0

Да, вы правы –