10.5. Filling a DataSet Asynchronously
Problem
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.
Solution
Create a background thread and use it to run a query to fill a DataSet.
The solution creates a thread invoking the FillDataSet() method that fills a DataSet with the Sales.SalesOrderHeader and Sales.SalesOrderDetail tables from the AdventureWorks database. The FillDataSet() method raises a DateSetFilled event that is handled in Main(). The DataSetFilled event handler calls the Program_DataSetFilled() method that displays some data from the filled DataSet.
The C# code in Program.cs in the project AsyncFillDataSet is shown in Example 10-8.
Example 10-8. File: Program.cs for AsyncFillDataSet solution
using System;
using System.Data;
using System.Data.SqlClient;
using System.Threading;
namespace AsyncFillDataSet
{
// Define delegate
public delegate void DataSetFilledEventHandler(
object sender, DataSetFilledEventArgs e);
// Define custom event arguments
public class DataSetFilledEventArgs : EventArgs
{
private DataSet ds;
public DataSetFilledEventArgs(DataSet filledDataSet)
{
this.ds = filledDataSet;
}
public DataSet FilledDataSet
{
get
{
return ds;
}
}
}
class Program { public static event DataSetFilledEventHandler DataSetFilled; protected static void OnDataSetFilled(DataSetFilledEventArgs e) { if (DataSetFilled != null) DataSetFilled(null, e); } static void ...Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access