日期:2014-05-18  浏览次数:20433 次

异步调用什么才能判断已经调用完成啊??
Assembly code

int a;
private void OKButton_Click(object sender, RoutedEventArgs e)
   {
       client.selectcateidbynameAsync((combocate.SelectionBoxItem as Je_BusCate).CategoryName);
       client.selectcateidbynameCompleted += new EventHandler<selectcateidbynameCompletedEventArgs>(client_selectcateidbynameCompleted);
MessageBox.Show(a.tostring());
}
void client_selectcateidbynameCompleted(object sender, selectcateidbynameCompletedEventArgs e)
        {
            
            if (e.Error == null)
            {
               a = e.Result;
            }


        }



Assembly code

int a;
private void OKButton_Click(object sender, RoutedEventArgs e)
   {
       client.selectcateidbynameAsync((combocate.SelectionBoxItem as Je_BusCate).CategoryName);
       client.selectcateidbynameCompleted += new EventHandler<selectcateidbynameCompletedEventArgs>(client_selectcateidbynameCompleted);

}
void client_selectcateidbynameCompleted(object sender, selectcateidbynameCompletedEventArgs e)
        {
            
            if (e.Error == null)
            {
                a= e.Result;
            }
MessageBox.Show(a.tostring());

        }


为什么这段代码,a的值会不一样啊,异步调用怎样才能判断完成??

------解决方案--------------------
callback被调用了,说明你的异步完成了。

下面的第二种代码的a才是异步之后的值。
------解决方案--------------------
在异步调用的方法最后,加委托通知主进程
------解决方案--------------------
如果你的CategoryName是一样的话, e.Result就是一样的

你这个是WebService么?

无论WebService还是WCF,都是全部数据获取完才触发AsynComplete

不用怀疑,这是肯定的,因为这是微软帮你生成的代码

除非你自己写Socket