Given a query running that runs asynchronously on a background thread, you want to give the user the option to cancel the query if it is taking too long.
Abort the background thread and clean up in an exception handler.
The sample code contains two event handlers and a single method:
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.
Aborts the background thread filling the
This method loads a
DataSet with the Orders and
Order Details tables from the Northwind database. The method displays
a message when the method has started and when it has completed. The
method also traps the
handle the situation where the fill on the background thread is
The C# code is shown in Example 9-2.
Example 9-2. File: AsynchronousFillCancelForm.cs
// Namespaces, variables, and constants using System; using System.Configuration; using System.Threading; using System.Data; using System.Data.SqlClient; // Table name constants private const String ORDERS_TABLE = "Orders"; private const String ORDERDETAILS_TABLE = "OrderDetails"; // Relation name constants private const String ORDERS_ORDERDETAILS_RELATION = "Orders_OrderDetails_Relation"; ...