我已经看到了如何使用按键控制器应用程序和winforms应用程序而不是WPF应用程序突破while循环的问题的答案。所以,呃,你是怎么做到的?感谢。
好的,让我们详细说明: 这样的东西在WPF(非控制台)应用程序中不起作用。它会引发运行时错误:
while(!Console.KeyAvailable)
{
//do work
}
答案 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中都是相同的。