У меня есть приложение WPF, подключенное к SQL Server; хотя я загружаю до 10 записей в свою DataGrid, мое приложение работает нормально, и ответ слишком быстрый, но когда я загружаю все строки (а это почти 1000), моему приложению требуется около 15 секунд для загрузки и замораживания всего пользовательского интерфейса.
Но когда я выполняю тот же запрос в SQL Server, загрузка этих 1000 строк занимает всего около 00: 00: 00.490 секунд, что слишком быстро. Что я уже сделал, как показано ниже, чтобы избежать зависания пользовательского интерфейса и быстрого выполнения запросов. Что я делаю не так? Пожалуйста, ознакомьтесь с фрагментами кода, поскольку я новичок в мире C #.
//CALLING FUNCTION TO LOAD DATA INTO DATAGRID IN A NEW THREAD TO MAKE UI RESPONSIVE
String qry = "select * from institutes_tbl"
DataGrid dg = MainDataGrid;
Thread thread = new Thread(() => FunDataGrid_DataView(dg, qry));
thread.IsBackground = true;
thread.Start();
но, к сожалению, мой пользовательский интерфейс показывает сообщение "Не отвечает". Ниже приведено определение функции:
public void FunDataGrid_DataView(DataGrid dg, string qry)
{
Application.Current.Dispatcher.BeginInvoke(
DispatcherPriority.Background,
new Action(() =>
{
try
{
con = new SqlConnection(con_string);
cmd = new SqlCommand(qry, con);
cmd.CommandTimeout = 12 * 3600;
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataTable dt = new DataTable();
da.Fill(dt);
dg.ItemsSource = dt.DefaultView;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Error!", MessageBoxButton.OK, MessageBoxImage.Warning);
}
}));
}
вот мой XAML
<DataGrid x:Name="DataGrid_View" MouseLeftButtonUp="DataGrid_View_MouseLeftButtonUp" ItemsSource="{Binding DATA_TBL}" LoadingRow="DataGrid_View_LoadingRow" Grid.Row="2" Grid.Column="0" ScrollViewer.CanContentScroll="False" AutoGenerateColumns="False" CanUserAddRows="False" Background="#7F179DB2" CellStyle="{StaticResource CellStyle}">
<DataGrid.Columns>
<DataGridTextColumn Header="Name" Binding="{Binding NAME}" Width="5*"/>
<DataGridTextColumn Header="Father Name" Binding="{Binding F_NAME}" Width="5*"/>
<DataGridTextColumn Header="CNIC" Binding="{Binding CNIC}" Width="5*"/>
</DataGrid.Columns>
</DataGrid>
Я хочу, чтобы мой пользовательский интерфейс реагировал и данные загружались быстро. Я сейчас работаю на локальном хосте.