Я пытаюсь правильно загрузить изображение: прямо сейчас тестирую обычные ошибки (т. Е. Файл, который плохо отформатирован). В настоящее время это просто приложение wpf, которое я использую для проверки.Изображение DecodeFailed событие не срабатывает?
public partial class MainWindow : Window
{
public MainWindow() {
var s = new BitmapImage();
var uri = new Uri("test.txt", UriKind.RelativeOrAbsolute); //test exists but is obviously no image data
DownloadImageListener dl = new DownloadImageListener(s);
s.DecodeFailed += (sender, e) =>
{
Console.WriteLine("event is performed as lambda");
};
s.BeginInit();
s.UriSource = uri;
s.EndInit();
Console.WriteLine(System.IO.File.Exists(uri.OriginalString)); //True!
Console.WriteLine(s.IsDownloading); //"False" - done loading!
Console.WriteLine(s.Width); //just to fail hard
}
}
class DownloadImageListener
{
private BitmapImage Img;
public DownloadImageListener(BitmapImage i) {
Img = i;
// Add "ListChanged" to the Changed event on "List".
Img.DecodeFailed += new EventHandler<ExceptionEventArgs>(ImageLoadFailed);
}
// This will be called whenever the list changes.
private void ImageLoadFailed(object sender, EventArgs e) {
Console.WriteLine("This is called when the loading failes");
}
public void Detach() {
// Detach the event and delete the list
Img.DecodeFailed -= new EventHandler<ExceptionEventArgs>(ImageLoadFailed);
Img = null;
}
}
ImageLoadFailed
метод никогда не вызывается (ни одна строка не печатается и не визуальная студия вызвать точки останова я поставил там). Я делаю что-то неправильно"? Я считаю, что следил за учебником, предоставленным msdn?
EDIT: Чтобы исключить все возможные другие ошибки, я добавил выше «isdownloading» проверить
Console.WriteLine(System.IO.File.Exists(uri.OriginalString));
- , который показывает «True» Я также добавил лямбда в качестве слушателя - как показано this page.
EDIT 2:
Testing "все" события, кажется, что только «чан ged "(так что код, чтобы поймать события, по-видимому, правильный) - остальные события никогда не срабатывают. - Почему это?
Хм это работает, но, похоже, «обойти» проблему: как мы все знаем, чтение с жесткого диска является «медленным» по сравнению с чем-либо еще. - Таким образом, отдавая контроль над пользовательским интерфейсом во время загрузки, в конечном счете, это путь. – paul23
Помните, что загрузка BitmapImage из локального файла всегда синхронна. Свойство 'IsDownloading' возвращает' false'. Ни один из событий 'DownloadProgress',' DownloadCompleted' или 'DownloadFailed' не будет запущен. По-видимому, также 'DecodeFailed' не запускается. – Clemens