1

在 c# 中,我试图Image在我的应用程序中淡入然后淡出。它在MainPage. 起初它工作得很好。但是如果我导航到另一个站点,让我们说Settings.xaml然后回到MainPageDispatcher throwsInvalid cross-thread access.

任何人都有一个想法,这就是我试图在我BackgroundWorker_DoWork函数中设置图像不透明度的方式:

Dispatcher.BeginInvoke(() =>
                    {
                        MyImage.Opacity = opacity;
                    });

有趣的是,它没有坏,但在上面放了一个breakpoint,它说一切都是Invalid cross-thread access.

4

2 回答 2

1

尝试使用Animation来实现您的淡入淡出逻辑,而不是BackgroundWorker. 它可能会有所帮助。

你试过这种方法吗?

使用Windows Phone Toolkit的另一种方法:

WP7 深度过渡 | 关键概念和 API

WP7 深度过渡 | 自定义过渡

这是旧文章,但它们可能包含有用的信息。

于 2013-01-12T18:05:02.097 回答
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();

        }));
    }
于 2013-01-13T14:05:17.783 回答