我正在尝试使用异步调用来保存数据库,并且我已经意识到我对工作原理的理解可能是不正确的。我已经完成了一些谷歌搜索,但它没有帮助减少我的困惑
我所拥有的内容类似于以下内容:
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);
但是我有什么工作,所以我在这里做错了吗?
另一件事是我相信我的回调我应该调用EndInvoke()
,因为其他stackoverflow问题表明它不是可选的。但其他地方似乎呢?但我能找到的大多数评论都来自2009年,我不知道自那时以来情况是否发生了变化。这是从ExportDatabase获取bool的唯一方法吗?
答案 0 :(得分:2)
new AsyncCallback(ExportDatabaseCallback)
只是创建委托的旧的,更长的方式。您的代码完全相同。
EndInvoke()
有时是可选的,但您不想知道何时何时不知道。只要打电话,你就永远是对的。