导航到的时候,我的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)
答案 0 :(得分:4)
您的问题是您没有在应用中创建ProgressIndicator的新实例。你必须实例化一个。在OnNavigatedTo方法中执行此操作。
protected override void OnNavigatedTo(NavigationEventArgs e)
{
base.OnNavigatedTo(e);
SystemTray.ProgressIndicator = new ProgressIndicator();
}
那应该解决你的问题。