wpf中点击button1循环执行任务,其中先执行代码A,等待10秒,执行代码B,在等待5秒。点击button2结束循环
时间: 2024-12-22 22:22:42 浏览: 3
C# 使用WPF 用MediaElement控件实现视频循环播放
在WPF中实现这种功能,你可以创建一个`RepeatButton`并设置其`ClickMode`属性为`Continuous`来实现连续触发,然后结合`DispatcherTimer`来控制执行间隔。这里是一个简单的示例:
1. 首先,在XAML中定义`RepeatButton`和两个`TextBox`用于显示代码A和B的执行结果:
```xml
<Window x:Class="YourNamespace.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Grid>
<RepeatButton x:Name="btn1" ClickMode="Continuous"
Command="{Binding IncrementCommand}"
Width="100" Height="50" />
<TextBox x:Name="txtCodeA" Text="{Binding CodeAText}" />
<TextBox x:Name="txtCodeB" Text="{Binding CodeBText}" />
</Grid>
</Window>
```
2. 在你的ViewModels中定义`IncrementCommand`,它会启动计时器和相关的代码执行:
```csharp
using System;
using System.Windows.Threading;
public class ViewModel : INotifyPropertyChanged
{
private DispatcherTimer _timer;
private int _delayA = 10000; // 10秒
private int _delayB = 5000; // 5秒
public ICommand IncrementCommand { get; }
public ViewModel()
{
IncrementCommand = new RelayCommand(() =>
{
CodeAText = "执行代码A...";
StartTimer(_delayA);
CodeBText = "等待中...";
_timer.Tick += (_, _) =>
{
if (_timer.IsEnabled)
{
CodeBText = "执行代码B...";
StopTimer();
}
};
});
}
private void StartTimer(int delay)
{
_timer = new DispatcherTimer
{
Interval = TimeSpan.FromMilliseconds(delay),
AutoStart = false,
Enabled = true
};
_timer.Start();
}
private void StopTimer()
{
_timer.Stop();
_timer = null;
}
// 其他依赖于PropertyChanged的通知逻辑...
}
```
3. 当需要停止循环时,可以在另一个Button(如`btn2`)上绑定一个取消命令,关闭计时器:
```csharp
private bool _isRunning;
public ICommand CancelCommand
{
get => _isRunning ? (ICommand)(new DelegateCommand(StopExecution)) : null;
}
private void StopExecution()
{
_isRunning = false;
if (_timer != null)
_timer.Stop();
}
```
现在,当你按住`btn1`时,每隔10秒执行一次代码A,然后立即执行代码B,直到你松开鼠标或者点击`btn2`来停止循环。
阅读全文