Наиболее распространенной причиной переполнения стека является чрезмерно глубокая или бесконечная рекурсия. Если это ваша проблема, этот учебник о Java Recursion может помочь понять проблему.
Это - потому что Создание было задержано. Если Вы хотите, чтобы изображение было сразу загружено, можно просто добавить этот код в init фазу.
src. CacheOption = BitmapCacheOption. OnLoad;
как это:
src.BeginInit();
src.UriSource = new Uri("picture.jpg", UriKind.Relative);
src.CacheOption = BitmapCacheOption.OnLoad;
src.EndInit();
Это - странное поведение и хотя я не могу сказать, почему это происходит, я могу рекомендовать некоторые опции.
Первый, наблюдение. Если Вы включаете изображение как Содержание в VS и копируете его в выходной каталог, Ваши работы кода. Если изображение не отмечено как Ни один в VS, и Вы копируете его, это не работает.
Решение 1: FileStream
объект BitmapImage принимает UriSource или StreamSource в качестве параметра. Давайте использовать StreamSource вместо этого.
FileStream stream = new FileStream("picture.png", FileMode.Open, FileAccess.Read);
Image i = new Image();
BitmapImage src = new BitmapImage();
src.BeginInit();
src.StreamSource = stream;
src.EndInit();
i.Source = src;
i.Stretch = Stretch.Uniform;
panel.Children.Add(i);
проблема: поток остается открытым. При закрытии его в конце этого метода изображение не обнаружится. Это означает, что файл остается заблокированным записью в системе.
Решение 2: MemoryStream
Это - в основном решение 1, но Вы читаете файл в поток памяти и передаете тот поток памяти как аргумент.
MemoryStream ms = new MemoryStream();
FileStream stream = new FileStream("picture.png", FileMode.Open, FileAccess.Read);
ms.SetLength(stream.Length);
stream.Read(ms.GetBuffer(), 0, (int)stream.Length);
ms.Flush();
stream.Close();
Image i = new Image();
BitmapImage src = new BitmapImage();
src.BeginInit();
src.StreamSource = ms;
src.EndInit();
i.Source = src;
i.Stretch = Stretch.Uniform;
panel.Children.Add(i);
Теперь Вы можете изменить файл в системе, если это - что-то, чего Вы требуете.
Вы могли попытаться присоединить обработчики к различным событиям BitmapImage:
Они могли бы сказать Вам немного о том, что продолжается, что касается изображения.