頼みます
シナリオ:私たちは、データアダプター(データテーブル)に接続されているDataGridViewのを持って、我々は(adapter.fill(クエリ、データテーブルを))を使用してDataTableのデータをロード(デリゲートとBeginInvokeメソッドを使用して)別のスレッドで、私たちは添付データがロードされるとDataGridViewのへ(メインスレッドで)のDataTableことを
我々は塗りつぶし()がまだ実行されているかどうかを確認し、それを取り消すことができる方法はあります。
実際のシナリオ:ユーザーのユーザー名をクリックすると、対応するデータがデータグリッドにロードされます。いつか、ユーザーはせっかちで、他のユーザーをクリックします(ここで私は、以前の塗りつぶしをキャンセルして新しい塗りを開始したいです)
UPDATE:我々は2つのDataApdaters(および2のDataTable)を保持し、我々は、DataGridViewの1つのデータテーブルを添付して、非同期に別のデータテーブルにデータをロードを開始します。データがロードされると、我々は単にバインド我々だけで満たされたDataTableにDataGridViewのUIは、常に(リフレッシュまたはハングするUI上で待機しているユーザーなし)現在のデータを取得します。この方法で(非同期以前datableのロードを開始)
答え
あなたは、アダプタのコンストラクタに、その上にメソッドを呼び出しキャンセルSqlCommandオブジェクトを提供することができます。生のテンプレートがあります:
クラスモデル { プライベートSqlCommandオブジェクトloadUserCommand。 民間のDataTableのuserData。 公共 のボイド LoadUser(文字列USERID) { loadUserCommand = GetUserLoadCommandForUserID(USERID)。 userData = 新しい DataTableの(" のuserData " ); 使用して(VARのアダプター= 新しいSqlDataAdapterオブジェクト(loadUserCommand)) { adapter.Fill(のuserData)。 } } 公共 のボイドAbortLoadUser() { もし(loadUserCommand!= nullの) loadUserCommand.Cancel(); } プライベート SqlCommandオブジェクトGetUserLoadCommandForUserID(文字列USERID) { VaRの接続= 新しい SqlConnectionオブジェクト(" ... " ); VaRのコマンド= connection.CreateCommand(); ... } }