如何结束BeginInvoke的异步调用?

zoujiaming 2008-07-01 09:41:44

{
mi = new MethodInvoker(ShowWaitingForm);
this.BeginInvoke(mi);
}
.........
private void ShowWaitingForm()
{
bgWaitingForm = new BackGroundWaitingForm("正在录入数据,请稍候...");
bgWaitingForm.Show();
}



异步调用了显示了一个窗口,现在我想在程序的某个位置手动关闭这个窗口,请问我怎么做?
我用IAsyncResult iar = this.BeginInvoke(mi);
再调用this.EndInvoke(iar);结束不了窗口?
...全文
302 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
horris 2009-05-30
  • 打赏
  • 举报
回复

xxx.BeginInvoke(...).AsyncWaitHandle.WaitOne(...)
暗石绿 2009-05-29
  • 打赏
  • 举报
回复
这个我也想知道。
gxf8119 2009-05-29
  • 打赏
  • 举报
回复
你只能是结束了打开了窗体的那个过程,实际上打开的窗体是已经属于单独的一个对象。
直接bgWaitingForm.close();,不能达到目的吗?
或者下面的写法如何,加个方法。

private void CloseWaitingForm()
{
bgWaitingForm.Close();
}
在需要关闭窗口的时候,下面的调用应该是没问题的。不过是画蛇添足,和直接调close()是一样的。
MethodInvoker mi2 = new MethodInvoker(CloseWaitingForm);
IAsyncResult iar2 = this.BeginInvoke(mi2);
this.EndInvoke(iar2);
zlkingdom 2008-07-01
  • 打赏
  • 举报
回复
开始和结束的对象要一致
zoujiaming 2008-07-01
  • 打赏
  • 举报
回复
顶一下
Windows 应用程序编程中常见的一个模式就是,在GUI用户界面下,将耗时的文件和网络处理放入 子线程,以避免用户界面不能响应的问题。在.NET出现以前,创建线 程并监视线程结束,还要更新 界面等工作,即复杂又要手写大量代码,并且难以调试。在.NET中,程序员可以通过异步调用,使 用简单的代码完成这项工作。 .NET Framework允许异步调用任何方法。使用异步调用之前,要定义一个委托,它的方法签名要与 调用方法签名一致。.NET会自动产生此委托的BeginInvoke和EndInvoke方法。 BeginInvoke 方法用于启动异步调用。它除了具有调用方法相同的参数外,还附加了两个额外的参 数,这两个额外参数将用于回调方法。 BeginInvoke执行后立即返回,并不等待异步调用完成。 BeginInvoke返回一个IAsyncResult接口,它可以用于监视调用的进度。EndInvoke方法被用来获取 异步调用的结果。在 BeginInvoke执行以后,任何时间都可以调用EndInvoke。如果异步调用尚未完 成,EndInvoke会被阻塞,直到异步调用完成。EndInvoke带有一个IAsyncResult接口类型的参数, 并返回一个IAsyncResult接口,用来获取调用结果。 本文中的代码演示了使用BeginInvoke和EndInvoke进行异步调用的四种常见调用方式。在调用 BeginInvoke之后,您可以: 1.完成一些其它工作,然后调用EndInvoke,等待异步调用完成。 2.使用IAsyncResult.AsyncWaitHandle获取一个WaitHandle,使用它的WaitOne方法执行阻塞调 用,完成后再调用EndInvoke。 3.轮询BeginInvoke返回的IAsyncResult接口,在异步调用完成后,再调用EndInvoke。 4.给BeginInvoke传递一个回调方法的委托,异步调用完成后,这个回调方法会在ThreadPool线程 上执行,可以在这个方法内调用EndInvoke。 警告:异步调用完成后,必须调用EndInvoke

110,535

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧