你如何在WPF中使用按键打破while循环?

时间:2013-07-18 14:55:44

标签: wpf c#-4.0 while-loop keypress

我已经看到了如何使用按键控制器应用程序和winforms应用程序而不是WPF应用程序突破while循环的问题的答案。所以,呃,你是怎么做到的?感谢。

好的,让我们详细说明: 这样的东西在WPF(非控制台)应用程序中不起作用。它会引发运行时错误:

while(!Console.KeyAvailable)
{
//do work
}    

2 个答案:

答案 0 :(得分:1)

您可以在KeyDown Event的{​​{1}}中创建na事件,并让MainWindow知道按下了哪个键。

KeyEventArgs e

答案 1 :(得分:1)

<强> MainWindow.xaml

<Window x:Class="WpfApplication34.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow"
        Width="525"
        Height="350">
  <Grid>
    <TextBlock x:Name="tb" />
  </Grid>
</Window>

<强> MainWindow.xaml.cs

public partial class MainWindow:Window {
  private int _someVal = 0;
  private readonly CancellationTokenSource cts = new CancellationTokenSource();

  public MainWindow() {
    InitializeComponent();
    Loaded += OnLoaded;
  }

  private async void OnLoaded(object sender, RoutedEventArgs routedEventArgs) {
    KeyDown += OnKeyDown;
    while (!cts.IsCancellationRequested) {
      await Task.Delay(1000); // Some Long Task
      tb.Text = (++_someVal).ToString();
    }
  }

  private void OnKeyDown(object sender, KeyEventArgs keyEventArgs) {
    if (keyEventArgs.Key == Key.A)
      cts.Cancel();
  }
}

这只是一个粗略的演示,只是采取这个概念。 WPF唯一特有的是捕获按键的方式。与破坏while循环相关的其他所有内容在控制台应用程序或wpf或winforms中都是相同的。