2011-12-14 14 views
0

データベースを保存するために非同期呼び出しを使用しようとしていますが、作業の仕組みが正しくない可能性があることを理解しています。私はGoogleの検索数を行っているが、それは私の混乱を減らすために役立っていないAsyncCallbackを新しいオブジェクトとして作成し、EndInvokeをオプションにする必要がありますか?

私は何を持っていることは、次のようになります。今

private delegate bool MyDelegate(); 

private void ExportButton_Click(object sender, EventArgs e) 
{ 
    // Disable button 
    exportButton.Enabled = false; 

    MyDelegate deleg = ExportDatabase; 

    // Begin the export 
    deleg.BeginInvoke(ExportDatabaseCallback, null); 
} 

public bool ExportDatabase() 
{ 
    // Do Stuff 
    return true; 
} 

private void ExportDatabaseCallback(IAsyncResult ar) 
{ 
    // Enable button 
    Invoke((MethodInvoker)delegate { exportButton.Enabled = true; }); 

    MessageBox.Show("Exporting Database complete"); 
} 

、他のページを見ると、私のBeginInvokeメソッドに示しているようです私はこれを次のようにしてください:deleg.BeginInvoke(new AsyncCallback(ExportDatabaseCallback), null);私は何をしていますか?私はここで何か間違っていますか?

もう1つは、コールバックを信じていると私はEndInvoke()を他のstackoverflow質問状態と呼ぶはずです。これはオプションではありません。しかし、他の場所ではそれはそうですか?しかし、私が見つけることができるほとんどのコメントは2009年からのものです。それ以来、物事が変わったかどうかはわかりません。これはExportDatabaseからboolを取得する唯一の方法ですか?

答えて

2
new AsyncCallback(ExportDatabaseCallback) 

は、代理人を作成するための古い方法です。あなたのコードはまったく同じです。

そして、EndInvoke()はオプションであることがありますが、いつ、いつではないかを知りたくありません。ちょうどそれを呼び出すと、あなたはいつも正しいです。

+0

多くの回答に感謝します。それはすべてゆっくりと落ち着きます。私はC#が進化したように、このようなショートカットを追加したと思いますが、例は必ずしも追いついていません。 – Firedragon

+0

一部の人々は長いフォームを好む。コードジェネレータも。 –

+0

それは、何が起こっているかを完全に明確にしてくれると思うし、そのようなものが舞台裏で行われるときにはいつも好きではないと思うことがあります。とにかく実際に起こっていることを知ることは有益です。 – Firedragon

関連する問題