在c#中,我试图在我的应用程序中淡出Image
。它是MainPage
中的图像。起初它很棒。但是,如果我导航到其他网站,请说Settings.xaml
,然后返回MainPage
,调度程序会抛出 Invalid cross-thread access.
任何人都有了想法,这就是我在BackgroundWorker
的{{1}}函数中设置图像不透明度的方式:
_DoWork
有趣,它不会破坏,但会在其上加上Dispatcher.BeginInvoke(() =>
{
MyImage.Opacity = opacity;
});
,并说明所有内容都是 breakpoint
答案 0 :(得分:1)
尝试使用Animation而不是BackgroundWorker
来实现淡入淡出逻辑。它可能有所帮助。
你试过这种方式吗?
使用Windows Phone Toolkit的另一种方式:
WP7 Transitions in depth | key concepts and API
WP7 Transitions in depth | custom transitions
这是旧文章,但它们可能包含有用的信息。
答案 1 :(得分:1)
试试这个:
Dispatcher.Invoke(DispatcherPriority.ContextIdle, new Action(delegate()
{
//your code in another thread you want to invoke in UI thread
}));
您应该从UI线程调用它,例如从MainWindow调用它。 从我的项目:
//Event raised on ImageSource property changed while Backgroundwoker in MainWindow class:
void binding_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
MyProject.ImageCropSize crop = MyProject.ImageCropSize.SourceCrop;
this.Dispatcher.Invoke(DispatcherPriority.ContextIdle, new Action(delegate()
{
BitmapImage bmisource = image1.Source as BitmapImage;
bmisource = null;//new BitmapImage();
GC.Collect();
BitmapImage bmi = MyProject.ImageData.ConvertFromBitmapToBitmapImage(((ImageBinding)sender).BitMap, crop);
image1.Source = bmi;
((ImageBinding)sender).Clear();
}));
}