空引用异常运行系统托盘消息WP8

时间:2014-09-01 02:44:10

标签: c# windows-phone-8 nullreferenceexception

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

    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:未将对象引用设置为对象的实例。

     
    

在ContosoSocial.StartPage。<> c__DisplayClass1.b__0(对象发件人,EventArgs args)

         

在MS.Internal.CoreInvokeHandler.InvokeEventHandler(Int32 typeIndex,Delegate handlerDelegate,Object sender,Object args)

         

at MS.Internal.JoltHelper.FireEvent(IntPtr unmanagedObj,IntPtr unmanagedObjArgs,Int32 argsTypeIndex,Int32 actualArgsTypeIndex,String eventName)

  

1 个答案:

答案 0 :(得分:4)

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

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

那应该解决你的问题。