首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 媒体动画 > CAD教程 >

异步延迟有关问题

2012-04-27 
异步延迟问题操作就是点击预览之后返回一个字符串,然后页面根据这个字符串来操作但因为异步方法,所以会有

异步延迟问题
操作就是点击预览之后返回一个字符串,然后页面根据这个字符串来操作
但因为异步方法,所以会有延迟,返回的字符串总是空
求教怎么解决?
我看有个帖子说可以加个延迟System.Threading.Thread.Sleep(1000);
可是我不知道这个延迟应该加在哪?

这是页面的代码,点击预览执行方法

C# code
//预览//.sfvm是viewmodel层this._sfvm.AsynchronousMessage += new EventHandler<HandMessage>(_sfvm_AsynchronousMessage);private void btnView_Click(object sender, RoutedEventArgs e){     FaxInfo fax = modelToFaxInfo(this._sfvm.FaxModel);     this._sfvm.getFaxTifFileUri(fax);}void _sfvm_AsynchronousMessage(object sender, HandMessage e){     if (!string.IsNullOrEmpty(e.Result))     {          sourseUrl = e.Result;      }          else      {          messageBox = new cwMessageBox("无法生成预览");          messageBox.Show();      }}


这是viewmodel层
C# code
 public void getFaxTifFileUri(FaxInfo fax, CustomException ex){       FaxServiceProxy.FaxServiceClient proxy = new FaxServiceClient();       proxy.GetFaxTifFileUriCompleted += new EventHandler<GetFaxTifFileUriCompletedEventArgs>(proxy_GetFaxTifFileUriCompleted);       proxy.GetFaxTifFileUriAsync(fax, ex);}void proxy_GetFaxTifFileUriCompleted(object sender, GetFaxTifFileUriCompletedEventArgs e){     if (e.Error==null)     {         HandMessage hm = new HandMessage();         hm.Result = e.Result;         AsynchronousMessage(null, hm);      }}/// <summary> 回调事件/// </summary>public event EventHandler<HandMessage> AsynchronousMessage;




[解决办法]
加在获取数据之后,因为获取数据是异步的,但是我感觉这种方法不太好,可以使用一个StoryBoard,在启动异步的时候设一个bool变量为false,StoryBoard启动,然后在StoryBoard completed事件中不停的检测bool变量,如果还是false则StoryBoard继续begin,子线程数据读取完毕后,将bool变量置为true,StoryBoard completed事件中发现bool变量为true了,知道子线程数据读取完毕,然后就可以操作数据了。
[解决办法]
你把读取返回字符串的代码写在异步回调函数里就可以,至于UI中你可以放一个loading动画之类的东西过度一下

热点排行