相关疑难解决方法(0)

是否有可能等待事件而不是另一个异步方法?

在我的C#/ XAML metro应用程序中,有一个启动长时间运行过程的按钮.所以,按照建议,我使用async/await来确保UI线程不被阻止:

private async void Button_Click_1(object sender, RoutedEventArgs e) 
{
     await GetResults();
}

private async Task GetResults()
{ 
     // Do lot of complex stuff that takes a long time
     // (e.g. contact some web services)
  ...
}
Run Code Online (Sandbox Code Playgroud)

偶尔,GetResults内发生的事情需要额外的用户输入才能继续.为简单起见,假设用户只需单击"继续"按钮即可.

我的问题是:如何以等待点击另一个按钮等事件的方式暂停GetResults的执行?

这是实现我正在寻找的东西的一种丑陋方式:"继续"按钮的事件处理程序设置了一个标志......

private bool _continue = false;
private void buttonContinue_Click(object sender, RoutedEventArgs e)
{
    _continue = true;
}
Run Code Online (Sandbox Code Playgroud)

...和GetResults定期轮询它:

 buttonContinue.Visibility = Visibility.Visible;
 while (!_continue) await Task.Delay(100);  // poll _continue every 100ms
 buttonContinue.Visibility = Visibility.Collapsed;
Run Code Online (Sandbox Code Playgroud)

民意调查显然非常糟糕(忙碌的等待/浪费周期),我正在寻找基于事件的东西.

有任何想法吗?

顺便说一下,在这个简化的例子中,一个解决方案当然是将GetResults()分成两部分,从开始按钮调用第一部分,从继续按钮调用第二部分.实际上,GetResults中发生的事情更复杂,并且在执行中的不同点可能需要不同类型的用户输入.因此,将逻辑分解为多种方法将是非常重要的.

c# async-await microsoft-metro .net-4.5 windows-store-apps

146
推荐指数
5
解决办法
6万
查看次数

正好杀死在Linux上运行的.NET Core守护程序

我创建了一个在Ubuntu 14.04计算机上作为守护进程运行的.NET Core控制台应用程序.

我想在不强制服务的情况下停止服务,能够处理kill事件.

我怎样才能做到这一点?

c# linux service daemon .net-core

32
推荐指数
2
解决办法
2万
查看次数