是否有可能等待事件而不是另一个异步方法?
在我的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) ...}
偶尔,GetResults内发生的事情需要额外的用户输入才能继续。为简单起见,假设用户只需单击“继续”按钮即可。
我的问题是:如何以等待点击另一个按钮等事件的方式暂停GetResults的执行?
这是实现我正在寻找的东西的一种丑陋方式:“继续”按钮的事件处理程序设置了一个标志......
private bool _continue = false;private void buttonContinue_Click(object sender, RoutedEventArgs e){ _continue = true;}
...和GetResults定期轮询它:
buttonContinue.Visibility = Visibility.Visible; while (!_continue) await Task.Delay(100); // poll _continue every 100ms buttonContinue.Visibility = Visibility.Collapsed;
民意调查显然非常糟糕(忙碌的等待/浪费周期),我正在寻找基于事件的东西。
有任何想法吗?
顺便说一下,在这个简化的例子中,一个解决方案当然是将GetResults()分成两部分,从开始按钮调用第一部分,从继续按钮调用第二部分。实际上,GetResults中发生的事情更复杂,并且在执行中的不同点可能需要不同类型的用户输入。因此,将逻辑分解为多种方法将是非常重要的。
温温酱
慕虎7371278