データベースを保存するために非同期呼び出しを使用しようとしていますが、作業の仕組みが正しくない可能性があることを理解しています。私は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を取得する唯一の方法ですか?
多くの回答に感謝します。それはすべてゆっくりと落ち着きます。私はC#が進化したように、このようなショートカットを追加したと思いますが、例は必ずしも追いついていません。 – Firedragon
一部の人々は長いフォームを好む。コードジェネレータも。 –
それは、何が起こっているかを完全に明確にしてくれると思うし、そのようなものが舞台裏で行われるときにはいつも好きではないと思うことがあります。とにかく実際に起こっていることを知ることは有益です。 – Firedragon