{
mi = new MethodInvoker(ShowWaitingForm);
                this.BeginInvoke(mi);
}
.........
private void ShowWaitingForm()
        {
            bgWaitingForm = new BackGroundWaitingForm("正在录入数据,请稍候...");
            bgWaitingForm.Show();
        }异步调用了显示了一个窗口,现在我想在程序的某个位置手动关闭这个窗口,请问我怎么做?
我用IAsyncResult iar = this.BeginInvoke(mi);
再调用this.EndInvoke(iar);结束不了窗口?

解决方案 »

  1.   

    你只能是结束了打开了窗体的那个过程,实际上打开的窗体是已经属于单独的一个对象。
    直接bgWaitingForm.close();,不能达到目的吗?
    或者下面的写法如何,加个方法。        private void CloseWaitingForm()
            {
                bgWaitingForm.Close();
            }
    在需要关闭窗口的时候,下面的调用应该是没问题的。不过是画蛇添足,和直接调close()是一样的。
                MethodInvoker mi2 = new MethodInvoker(CloseWaitingForm);
                IAsyncResult iar2 = this.BeginInvoke(mi2);
                this.EndInvoke(iar2);
      

  2.   


    xxx.BeginInvoke(...).AsyncWaitHandle.WaitOne(...)