Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 加载窗口的进度条或其他想法_C#_Wpf_Datagrid_Progress Bar - Fatal编程技术网

C# 加载窗口的进度条或其他想法

C# 加载窗口的进度条或其他想法,c#,wpf,datagrid,progress-bar,C#,Wpf,Datagrid,Progress Bar,我有一个窗口,需要大约4-5秒来加载,然后才能显示其内容。 正在运行一个大型查询来填充数据网格。 加载期间,新窗口打开,但DataGrid部分在短时间内变为黑色 我如何添加ProgressBar或其他东西,以便用户不会认为应用程序正在崩溃 public partial class SqlCreatedReports : Window { public SqlCreatedReports() { InitializeComponent(); } p

我有一个窗口,需要大约4-5秒来加载,然后才能显示其内容。 正在运行一个大型查询来填充数据网格。 加载期间,新窗口打开,但DataGrid部分在短时间内变为黑色

我如何添加ProgressBar或其他东西,以便用户不会认为应用程序正在崩溃

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;
    }
}