相关疑难解决方法(0)

如何让.NET控制台应用程序运行?

考虑一个Console应用程序,它在一个单独的线程中启动一些服务.它需要做的就是等待用户按Ctrl + C将其关闭.

以下哪项是更好的方法?

static ManualResetEvent _quitEvent = new ManualResetEvent(false);

static void Main() {
    Console.CancelKeyPress += (sender, eArgs) => {
        _quitEvent.Set();
        eArgs.Cancel = true;
    };

    // kick off asynchronous stuff 

    _quitEvent.WaitOne();

    // cleanup/shutdown and quit
}
Run Code Online (Sandbox Code Playgroud)

或者,使用Thread.Sleep(1):

static bool _quitFlag = false;

static void Main() {
    Console.CancelKeyPress += delegate {
        _quitFlag = true;
    };

    // kick off asynchronous stuff 

    while (!_quitFlag) {
        Thread.Sleep(1);
    }

    // cleanup/shutdown and quit
}
Run Code Online (Sandbox Code Playgroud)

c# multithreading sleep manualresetevent

95
推荐指数
5
解决办法
4万
查看次数

Thread.Sleep()的替代品

我们每隔N分钟就要完成一系列任务.所以我们用a创建了一个任务执行器

do { DoWork(); }while(!stopRequested)
Run Code Online (Sandbox Code Playgroud)

现在我们希望在工作周期之间暂停一下.每个人似乎都认为Thread.Sleep()是魔鬼.我已经看到提到使用监视/事件的东西,但我们没有其他人告诉我们做的工作.我们只想每隔N分钟就像发条一样做.

那么有没有替代方案或者我找到了Thread.Sleep的有效使用方法?

另一篇帖子中有人提到WaitHandle.WaitOne()作为替代,但你不能用非静态方法调用它吗?或者至少我不能,因为我得到编译时错误..

非静态字段,方法或属性'System.Threading.WaitHandle.WaitOne(System.TimeSpan)'需要对象引用

c# multithreading

36
推荐指数
4
解决办法
5万
查看次数

标签 统计

c# ×2

multithreading ×2

manualresetevent ×1

sleep ×1