0

我一直在尝试修改其他人过去开发的应用程序...

这个应用程序进行在线交易(使用为 C# 开发的 api)..所以基本上我有应用程序结构,我设置了一些用户可以检查或取消选中的配置参数,并且有启动和停止按钮

在单击开始按钮时..我正在通过传递函数创建一个线程,该函数将执行所有 aping 和其他内容并将其分配给主表单类

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

并单击停止按钮,,,app 只是暂停线程

this.main_thread.Suspend()

现在应用程序停止,恢复应用程序功能(aping)的唯一方法是按下开始按钮并重新启动线程..

作为一项新功能,我希望这个线程自动停止并重新启动......每次它达到一定的止损并重新开始......但我做不到

我厌倦的是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();
}

我怎样才能做到这一点

4

1 回答 1

0

你应该在你的工作线程应该停止的地方添加一个 WaitOne 方法的调用。

mrse.WaitOne()

下次外部代码通过调用重置它时

mrse.Reset()

执行将停止,线程将在此时进入睡眠状态

mrse.WaitOne()

直到外部代码调用 ManualResetEvent 的 Set 方法

mrse.Set()
于 2015-08-06T14:40:01.917 回答