wpf 中, 我要实现这个逻辑: 点击按钮, 显示加载动画, 执行费时操作, 取消加载动画. 但是实际运行时, 不会显示加载动画, 我不想用异步方法来执行耗时操作
时间: 2023-08-22 14:06:34 浏览: 186
WPF数据加载,时钟动画.rar
你可以在按钮的点击事件处理程序中添加以下逻辑:
1. 显示加载动画。
2. 将按钮的 `IsEnabled` 属性设置为 `false`,以防止用户在加载过程中重复点击按钮。
3. 使用 `Dispatcher.Invoke` 或 `Dispatcher.BeginInvoke` 方法将耗时操作放到 UI 线程的队列中,以避免阻塞 UI 线程。
4. 在耗时操作完成后,使用 `Dispatcher.Invoke` 或 `Dispatcher.BeginInvoke` 方法将取消加载动画的逻辑放到 UI 线程的队列中。
5. 将按钮的 `IsEnabled` 属性设置为 `true`,以允许用户再次点击按钮。
以下是示例代码:
```csharp
private void Button_Click(object sender, RoutedEventArgs e)
{
// 显示加载动画
loadingAnimation.Visibility = Visibility.Visible;
// 禁用按钮
button.IsEnabled = false;
// 将耗时操作放到 UI 线程的队列中
Dispatcher.Invoke(() =>
{
// 执行费时操作
// ...
// 将取消加载动画的逻辑放到 UI 线程的队列中
Dispatcher.Invoke(() =>
{
// 隐藏加载动画
loadingAnimation.Visibility = Visibility.Collapsed;
// 启用按钮
button.IsEnabled = true;
});
});
}
```
阅读全文