C# 加载窗口的进度条或其他想法
我有一个窗口,需要大约4-5秒来加载,然后才能显示其内容。 正在运行一个大型查询来填充数据网格。 加载期间,新窗口打开,但DataGrid部分在短时间内变为黑色 我如何添加ProgressBar或其他东西,以便用户不会认为应用程序正在崩溃C# 加载窗口的进度条或其他想法,c#,wpf,datagrid,progress-bar,C#,Wpf,Datagrid,Progress Bar,我有一个窗口,需要大约4-5秒来加载,然后才能显示其内容。 正在运行一个大型查询来填充数据网格。 加载期间,新窗口打开,但DataGrid部分在短时间内变为黑色 我如何添加ProgressBar或其他东西,以便用户不会认为应用程序正在崩溃 public partial class SqlCreatedReports : Window { public SqlCreatedReports() { InitializeComponent(); } p
public partial class SqlCreatedReports : Window
{
public SqlCreatedReports()
{
InitializeComponent();
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
DataGridFill();
}
private void DataGridFill()
{
CollectionViewSource dataViewSource =
(CollectionViewSource)(this.FindResource("dataViewSource"));
// Load data by setting the CollectionViewSource.Source property:
// dataViewSource.Source = [generic data source]
var manager = new ReportMadeManager();
if (Convert.ToInt32(statusReportID.Content) == 4)
{
dataGridReports.ItemsSource = manager.selectReportDJVJ(
Convert.ToInt32(statusParameter1.Content),
Convert.ToInt32(statusParameter2.Content));
}
else if (Convert.ToInt32(statusReportID.Content)==5)
{
dataGridReports.ItemsSource = manager.selectReportCriticalProducts(
Convert.ToInt32(statusParameter1.Content),
Convert.ToInt32(statusParameter2.Content));
}
}
}
添加对的NuGet引用
使用BusyIndicator的IsBusy属性将数据网格包围起来。
使DataGridFill异步并等待完成繁重的任务
Xaml:
<Window x:Class="StackOverflow_ProgressBar.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:StackOverflow_ProgressBar"
xmlns:tlkt="http://schemas.xceed.com/wpf/xaml/toolkit"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525">
<Grid>
<tlkt:BusyIndicator Name="DataGridBusyIndicator">
<DataGrid Name="dataGridReports" Loaded="dataGridReports_Loaded"/>
</tlkt:BusyIndicator>
</Grid>
</Window>
private void dataGridReports_Loaded(object sender, RoutedEventArgs e)
{
DataGridFill();
}
private async void DataGridFill()
{
DataGridBusyIndicator.IsBusy = true;
try
{
var items = await Task.Run(() =>
{
var manager = new ReportMadeManager();
if (Convert.ToInt32(statusReportID.Content) == 4)
{
return manager.selectReportDJVJ(
Convert.ToInt32(statusParameter1.Content),
Convert.ToInt32(statusParameter2.Content));
}
else if (Convert.ToInt32(statusReportID.Content) == 5)
{
return manager.selectReportCriticalProducts(
Convert.ToInt32(statusParameter1.Content),
Convert.ToInt32(statusParameter2.Content));
}
});
dataGridReports.ItemsSource = items;
}
finally
{
DataGridBusyIndicator.IsBusy = false;
}
}