Проект Windows Phone 8. У меня есть класс, который содержит ссылку на изображение. Я инициализирую эту ссылку в обработчике запуска запуска в классе приложения:Статическая переменная, инициализированная в App_Launching внезапно null
private void Application_Launching(object sender, LaunchingEventArgs e)
{
TheClass.Load();
}
//Elsewhere...
class TheClass
{
static private int[] s_Pixels = null;
static public void Load()
{
BitmapImage bi = new BitmapImage(new Uri("/res/image.png", UriKind.Relative));
bi.CreateOptions = BitmapCreateOptions.BackgroundCreation;
bi.ImageOpened += OnImageLoaded;
bi.ImageFailed += OnImageFailed;
}
private static void OnImageLoaded(object o, RoutedEventArgs a)
{
BitmapImage bi = o as BitmapImage;
s_Pixels = new WriteableBitmap(bi).Pixels;
}
// And consumers call this one:
static public WriteableBitmap GetImage()
{
if (s_Pixels == null)
SendDebugReport();
}
}
Этот код работает для меня. И все же я получаю эти отчеты об отладке, указывая, что s_Pixels имеет значение NULL. Я не могу воспроизвести его, но, очевидно, мои пользователи могут это сделать. Существует путь к коду, который приводит к тому, что GetImage()
вызывается без предварительного вызова Load()
.
Это Load
Это не называется, не то, что я звоню Load
и OnImageLoaded
никогда не бывает.
Других присвоений s_Pixels в других местах нет.
Я проверяю ошибки при загрузке изображений. Есть обработчик событий ImageFailed
, который оставляет след журнала. Он никогда не вызывается, и почему бы это - изображение, о котором идет речь, находится в ресурсах приложения.
Как это возможно? Как приложение Windows Phone можно инициализировать и загрузить без запуска запуска?