正如建议的那样,数据加载应该使用异步任务完成。这保证了你的 UI 在后台进程中保持响应,否则长任务在 UI 线程上运行,阻塞它直到任务完成。
这是处理后台任务并向用户显示要求等待的窗口的一种非常简单的方法。
public partial class MainWindow : Window
{
internal WaitWindow waitMessage = new();
public MainWindow()
{
InitializeComponent();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
StartLoading();
}
private Task LoadData() // Return type is Task
{
// Your data loading process
Thread.Sleep(3000); // simulates execution time
return Task.CompletedTask; // Return information of task completed
}
private async void StartLoading() // Note that the method must be marked async
{
waitMessage.Show(); // Display wait window
Task loadData = new(() => LoadData());
loadData.Start();
await loadData; // The await keyword is used to asynchronously wait the task completion
waitMessage.Hide(); // Hide wait window.
}
}
为了防止用户关闭等待窗口,请在其 xaml 文件中添加WindowStyle=None。
请注意,根据您的完整应用程序架构,这可能不是可用的最佳选项,但它是最简单的选项之一。