2014-09-01 63 views
0

我的WP8应用程序在导航到系统托盘时会在几秒钟内显示一条消息。但是我用来显示消息的以下方法总是抛出一个System.NullReferenceException:对象引用未设置为对象的实例。 我很困惑这是为什么,也许有人可以指出什么是错的? 的代码是:空引用异常正在运行系统托盘消息WP8

private void runSystrayMessage(bool isVisible, string text, int length) 
    { 
     try 
     { 
      SystemTray.ProgressIndicator.IsVisible = true; 
      SystemTray.ProgressIndicator.IsIndeterminate = isVisible; 
      SystemTray.ProgressIndicator.Text = text; 
     } 
     catch (Exception e) 
     { 
      Debug.WriteLine("Exception caught" + e); 
     } 


     DispatcherTimer timer = new DispatcherTimer(); 
     try 
     { 
      timer.Interval = TimeSpan.FromMilliseconds(length); 
     } 
     catch(ArgumentOutOfRangeException e) 
     { 
      Debug.WriteLine("ArgumentOutOfrangeException caught" + e); 
     } 

     timer.Tick += (sender, args) => 
     { 
      try 
      { 
       SystemTray.ProgressIndicator.IsVisible = false; 
      } 
      catch(System.InvalidOperationException e) 
      { 
       Debug.WriteLine("InvalidOperationException caught" + e); 
      } 
      timer.Stop(); 
     }; 
     timer.Start(); 
    } 

完整异常消息是:

System.NullReferenceException:对象不设置为一个对象的一个​​实例。

at ContosoSocial.StartPage。 <> c__DisplayClass1.b__0(对象发件人,EventArgs参数)

在MS.Internal.CoreInvokeHandler.InvokeEventHandler(的Int32 typeIndex,代表handlerDelegate,对象发件人,对象参数)

在MS.Internal.JoltHelper.FireEvent( IntPtr的unmanagedObj,IntPtr的unmanagedObjArgs,的Int32 argsTypeIndex,的Int32 actualArgsTypeIndex,字符串eventName的)

+2

你为什么要捕捉这些例外?你基本上忽略了它们。如果其中一个例外意味着什么是错误的呢? – 2014-09-01 02:54:48

+0

尝试使用调试器 – 2014-09-01 03:26:57

回答

4

你的问题是你有没有在你的应用程序创建的ProgressIndicator的新实例。你必须实例化一个。在OnNavigatedTo方法中执行此操作。

protected override void OnNavigatedTo(NavigationEventArgs e) 
{ 
    base.OnNavigatedTo(e); 
    SystemTray.ProgressIndicator = new ProgressIndicator(); 
} 

这应该可以解决您的问题。

+0

谢谢我已经在那里尝试过,但现在工作! – TripVoltage 2014-09-01 04:03:25