SqlDataAdapter.Fill()が実行されるキャンセルする方法(再生)

頼みます


 

シナリオ:私たちは、データアダプター(データテーブル)に接続されている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();
        ...
    }
}

 

説明リンク

 

おすすめ

転載: www.cnblogs.com/OpenCoder/p/12063867.html