Given some database queries that return large result sets and cause the calling application to be unresponsive, you need to make the application more responsive during the fill.
Create a background thread and use it to run a query to fill a
DataSet. You can also fill a
DataGrid object from a background thread.
The sample code contains one event handler and two methods:
Checks whether there is an existing background thread loading the
DataSet. If the
DataSet is not
being loaded, a new thread is created invoking the
AsyncFillDataSet( ) method to fill a
DataSet. Otherwise, a message is displayed stating
DataSet is currently being filled.
This method loads a
DataSet with the Orders and
Order Details tables from the Northwind database. The
BindDataSetToDataGrid( ) method is called
asynchronously on the form’s thread to display the
results. Finally, messages are displayed to indicate that the
AsyncFillDataSet( ) method has started and when it
This method binds the default view of the Orders table in the
DataSet to the data grid on the form.
The C# code is shown in Example 9-1.
Example 9-1. File: AsynchronousFillForm.cs
// Namespaces, variables, and constants using System; using System.Configuration; using System.Threading; using System.Runtime.Remoting.Messaging; using System.Data; using System.Data.SqlClient; private delegate void BindDataSetToDataGridDelegate(DataSet ...