我有一个可以射击的小型游戏项目,但主要问题是射击之间没有延迟,因此我尝试使用不同的计时器。似乎是最好的选择是 dispatcherTime 但是当它运行时它停止了整个程序 5 秒钟所以我只想知道是否有办法延迟程序中的一行代码而不停止一切或者是否有这样做的更好方法是什么?
答案 0 :(得分:1)
您可以尝试以下操作。
MainWindow.xaml.cs
public partial class MainWindow : Window
{
private CancellationTokenSource _cancellationTokenSource;
public MainWindow()
{
InitializeComponent();
}
private async void ShootBox_OnKeyDown(object sender, KeyEventArgs keyEventArgs)
{
if (_cancellationTokenSource != null)
return;
_cancellationTokenSource = new CancellationTokenSource();
await ShootThatDamnPistol(_cancellationTokenSource.Token);
}
private void ShootBox_OnKeyUp(object sender, KeyEventArgs keyEventArgs)
{
_cancellationTokenSource.Cancel();
_cancellationTokenSource = null;
}
async Task ShootThatDamnPistol(CancellationToken cToken)
{
try
{
while (!cToken.IsCancellationRequested)
{
await Task.Delay(500, cToken);
ShootBox.Text += "Bang!" + Environment.NewLine;
}
}
catch (TaskCanceledException)
{
//nope
}
}
}
MainWindow.xaml
<Window x:Class="WpfApp17.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<TextBox x:Name="ShootBox"
KeyDown="ShootBox_OnKeyDown"
KeyUp="ShootBox_OnKeyUp" />
</Window>