大概流程用户通过登录界面登录后从服务区取得token保存在本地,这个token用于调用Http服务器的其他方法。用户从界面1点击按钮 -> 界面2,界面2的OnLoaded方法做异步Http调用,UI在等待,调用完成MessageBox提示返回问题:因为token可能会失效,在界面2的异步调用后发现服务器返回代码表示token失效,所以想把阻塞当前UI,重新从服务器获取token后再次,运行OnLoaded中的内容,请问应该怎么做?

解决方案 »

  1.   

    伪代码:OnLoaded()
    {
    DoTask();
    }DoTask()
    {
    Api api = new Api();
    api.OnDownloadCompleted += OnDownloadCompleted;
    api.doTask();
    }OnDownloadCompleted(object sender, DownloadCompletedEventArgs e)
    {
    //这里的doLogin怎么些?不能再异步了吧?所以需要阻塞在这里
    if (e.Result == token无效) { doLogin(); DoTask(); }
    }
      

  2.   

    UI最好不要阻塞,不好的用户体验,你只需要在B页面的操作之前判断一下token的可用性即可
      

  3.   

    楼上说的有理。
    如果非要这么做,可将token无效时的处理交给委托去处理。
      

  4.   

    把doTask放到doLogin的回调方法中,暂时这样了。