Windows phone:从后台代理通知调用事件处理程序
本文关键字:通知 调用 事件处理 程序 代理 后台 phone Windows | 更新日期: 2023-09-27 18:04:48
我正试图从一个网站下载一个图像,并使其在WP8上的瓷砖的背景。在OnInvoke()方法上的后台代理中,我有以下几行代码将该图像下载到BitmapImage对象中:
static BitmapImage img;
protected override void OnInvoke(ScheduledTask task)
{
Deployment.Current.Dispatcher.BeginInvoke(() =>
{
img = new BitmapImage(new Uri(imgLoc, UriKind.Absolute));
img.ImageOpened += img_ImageOpened;
});
}
但是,当我遍历代码时,我从未碰到过img_ImageOpened事件
void img_ImageOpened(object sender, RoutedEventArgs e)
{
Deployment.Current.Dispatcher.BeginInvoke(() =>
{
Image uiImage = new Image();
uiImage.Source = img;
CreateNewHubTile(uiImage);
});
}
URI是正确的,我可以步骤到Deployment.Current.Dispatcher.BeginInvoke(())…在OnInvoke()方法中,只有BitmapImage的事件没有被调用。
我试着在谷歌上搜索一些东西,但我似乎没有使用正确的关键词…
您需要做的是禁用延迟创建BitmapImage,这是通过将CreateOptions设置为None来完成的,如下所示:
protected override void OnInvoke(ScheduledTask task)
{
Deployment.Current.Dispatcher.BeginInvoke(() =>
{
img = new BitmapImage(new Uri(imgLoc, UriKind.Absolute));
img.CreateOptions = BitmapCreateOptions.None;
img.ImageOpened += img_ImageOpened;
});
}
如果你有一个调用NotifyComplete(),确保它不会被调用,直到你收到你的事件。