gpt4 book ai didi

c# - Silverlight 4 BitmapImage 错误 : ImageOpened not invoked after SetSource()

转载 作者:行者123 更新时间:2023-11-30 17:16:11 30 4
gpt4 key购买 nike

这似乎是一个严重的错误:

        private void LayoutRoot_Drop(object sender, DragEventArgs e)
{
if ((e.Data != null) && (e.Data.GetDataPresent(DataFormats.FileDrop)))
{
FileInfo[] files = (FileInfo[])e.Data.GetData(DataFormats.FileDrop);

using (FileStream fileStream = files[0].OpenRead())
{
//Code reaching this point.
BitmapImage bmpImg = new BitmapImage();
bmpImg.ImageOpened += new EventHandler<RoutedEventArgs>(bmpImg_ImageOpened);
bmpImg.ImageFailed += new EventHandler<ExceptionRoutedEventArgs>(bmpImg_ImageFailed);
try
{
bmpImg.SetSource(fileStream);
}
catch
{
//Code dosen't reach here.
}
}
}
}

void bmpImg_ImageFailed(object sender, ExceptionRoutedEventArgs e)
{
//Code dosen't reach here.
}

void bmpImg_ImageOpened(object sender, RoutedEventArgs e)
{
//Code dosen't reach here.
}

我正在经历一种非常奇怪的行为。在我的电脑 上运行此代码,它有效 - 当您将 JPG 拖到 LayoutRoot 上时,我可以在 bmpImg_ImageOpened() 内部中断。

但是在不同的机器上它不会工作 - 当拖动 JPG 时,我可以中断 drop 事件但是在 SetSource() 之后没有任何反应:没有抛出异常,也没有调用回调。

我在另一台机器上试过了,还是不行。

编辑:在所有机器上,当添加一个 Image 类并将其 Source 属性设置为 bitmapImage 时,图像显示正常。所以我想这是回调的问题。这还不够,因为我还需要那些事件。

我在这里撞头,这可能是什么?

最佳答案

这就是 Silverlight 一直以来的行为方式。 ImageOpened 仅在下载和解码图像(即使用 Source)时触发。使用 SetSource 时它不会触发。如果您需要在加载图像后访问尺寸,请为 PixelWidthPixelHeight 属性使用 WriteableBitmap(而不是 BitmapImage) 或者做类似的事情:

img.Source = bmpImg;
Dispatcher.BeginInvoke(() =>
{
FakeImageOpened(); // Do logic in here
});

关于c# - Silverlight 4 BitmapImage 错误 : ImageOpened not invoked after SetSource(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7420392/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com