首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >NullReferenceException在Windows 7应用程序上从SkyDrive下载文件

NullReferenceException在Windows 7应用程序上从SkyDrive下载文件
EN

Stack Overflow用户
提问于 2013-09-15 20:03:45
回答 1查看 180关注 0票数 0

我有应用程序,应该备份和恢复它的数据库到SkyDrive。但是,如果我在使用“开始”按钮(快速应用程序切换)上传或下载备份到/从SkyDrive时关闭应用程序,然后使用"back“按钮返回应用程序,则会捕获未处理的NullReferenceException:

代码语言:javascript
运行
复制
void RestoreFromSkyDrive() {
  ShowProgress();

  LiveConnectClient client = new LiveConnectClient(App.Session);
  string id = string.Empty;
  if (client != null) {
    client.GetCompleted += (obj, args) => {
      try {
        List<object> items;

        if (args != null && args.Result != null && args.Result["data"] != null)
          items = args.Result["data"] as List<object>;
        else
          return;

        foreach (object item in items) {
          Dictionary<string, object> file = item as Dictionary<string, object>;
          // fileName is a name of backup-file
          if (file != null && file["name"] != null && file["name"].ToString() == fileName) {
            id = file["id"].ToString();
            if (client != null) client.DownloadCompleted += new EventHandler<LiveDownloadCompletedEventArgs>(client_DownloadCompleted);
            if (client != null) client.DownloadAsync(String.Format("{0}/content", id));
            break;
          }
        }
      }
      catch (Exception ex) {
        MessageBox.Show(ex.Message + " restore");
      }
    };
    if (client != null) {
      client.GetAsync("me/skydrive/files");
    }
  }
}

void client_DownloadCompleted(object sender, LiveDownloadCompletedEventArgs e) {
  try {
    if (e.Error == null) {
      Stream stream = e.Result;

      using (IsolatedStorageFile storage = IsolatedStorageFile.GetUserStoreForApplication()) {
        var fileToSave = new IsolatedStorageFileStream(Constants.dbName, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None, storage);
        stream.CopyTo(fileToSave);
        stream.Flush();
        stream.Close();
        fileToSave.Close();
      }
    }
    else {
      MessageBox.Show(e.Error.Message + " dcompleted mb");
    }
  }
  catch (WebException ex) { MessageBox.Show(ex.Message + " dcompleted ex"); }
  HideProgress();
}

我插入了大量null检查,但不管怎样,我捕获了NullReferenceException。我不知道我能用它做什么

PS: StackTrace有启用的CLR异常:

代码语言:javascript
运行
复制
System.Net.WebException occurred
Message=WebException
StackTrace:
   at System.Net.Browser.ClientHttpWebRequest.InternalEndGetResponse(IAsyncResult asyncResult)
   at System.Net.Browser.ClientHttpWebRequest.<>c__DisplayClass2.<EndGetResponse>b__1(Object sendState)
   at System.Net.Browser.AsyncHelper.<>c__DisplayClass4.<BeginOnUI>b__0(Object sendState)
   at System.Reflection.RuntimeMethodInfo.InternalInvoke(RuntimeMethodInfo rtmi, Object obj, BindingFlags invokeAttr, Binder binder, Object parameters, CultureInfo culture, Boolean isBinderDefault, Assembly caller, Boolean verifyAccess, StackCrawlMark& stackMark)
   at System.Reflection.RuntimeMethodInfo.InternalInvoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, StackCrawlMark& stackMark)
   at System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters)
   at System.Delegate.DynamicInvokeOne(Object[] args)
   at System.MulticastDelegate.DynamicInvokeImpl(Object[] args)
   at System.Delegate.DynamicInvoke(Object[] args)
   at System.Windows.Threading.Dispatcher.<>c__DisplayClass4.<FastInvoke>b__3()
   at System.Reflection.RuntimeMethodInfo.InternalInvoke(RuntimeMethodInfo rtmi, Object obj, BindingFlags invokeAttr, Binder binder, Object parameters, CultureInfo culture, Boolean isBinderDefault, Assembly caller, Boolean verifyAccess, StackCrawlMark& stackMark)
   at System.Reflection.RuntimeMethodInfo.InternalInvoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, StackCrawlMark& stackMark)
   at System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters)
   at System.Delegate.DynamicInvokeOne(Object[] args)
   at System.MulticastDelegate.DynamicInvokeImpl(Object[] args)
   at System.Delegate.DynamicInvoke(Object[] args)
   at System.Windows.Threading.DispatcherOperation.Invoke()
   at System.Windows.Threading.Dispatcher.Dispatch(DispatcherPriority priority)
   at System.Windows.Threading.Dispatcher.OnInvoke(Object context)
   at System.Windows.Hosting.CallbackCookie.Invoke(Object[] args)
   at System.Windows.Hosting.DelegateWrapper.InternalInvoke(Object[] args)
   at System.Windows.RuntimeHost.ManagedHost.InvokeDelegate(IntPtr pHandle, Int32 nParamCount, ScriptParam[] pParams, ScriptParam& pResult)

有禁用CLR异常的StackTrace:

代码语言:javascript
运行
复制
System.NullReferenceException was unhandled
Message=NullReferenceException
StackTrace:
   at Microsoft.Live.Operations.DownloadOperation.CompleteOperation(Exception error)
   at Microsoft.Live.Operations.DownloadOperation.OnCancel()
   at Microsoft.Live.Operations.WebOperation.OnGetWebResponse(IAsyncResult ar)
   at System.Net.Browser.ClientHttpWebRequest.<>c__DisplayClassa.<InvokeGetResponseCallback>b__8(Object state2)
   at System.Threading.ThreadPool.WorkItem.WaitCallback_Context(Object state)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
   at System.Threading.ThreadPool.WorkItem.doWork(Object o)
   at System.Threading.Timer.ring()
EN

Stack Overflow用户

回答已采纳

发布于 2013-09-21 21:05:59

使用BackgroundDownload(上传)异步方法而不是下载(上传)异步方式可以帮助我。

票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18816939

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档