2013-03-19 40 views
1

我試圖從網站下載圖像,並將其作爲WP8上的圖塊的背景。在上OnInvoke()方法,我的後臺代理,我有以下行到圖像下載到的BitmapImage對象:Windows phone:從後臺代理呼叫eventhandlers通知

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是正確的,我可以進入OnInvoke()方法的Deployment.Current.Dispatcher.BeginInvoke(())...,它只是BitmapImage中沒有被調用的事件。

我試過搜索谷歌的東西,但我似乎沒有使用正確的關鍵字...任何幫助將不勝感激。

回答

0

你需要做的是禁用的BitmapImage的延遲創作,這是由CreateOptions設置爲無,這樣做:

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()的調用,確保在你收到你的活動之前不會被調用。

+0

賓果,謝謝! 我會投你的答案,但我沒有足夠的代表。再次感謝! – Jon 2013-03-20 02:11:03