0

リストボックス「lstImageFromMediaLibrary」内のワープパネルにメディアライブラリから画像を取得しようとしています。また、画像の読み込み中に、ユーザーコントロールを使用して読み込み画面を表示し、それを popup.child に追加しようとしていますが、この例外「UnauthorizedAccessException」が発生しています' backgrougWorker 関連のコードをすべて削除すると、そのような不正アクセスはありません....

     void backroungWorker_DoWork(object sender, DoWorkEventArgs e)
      {

        foreach (Picture p in mediaLibrary.Pictures)
        {

            bitmapImage.SetSource(p.GetThumbnail());
            lstBitmapImage.Add(bitmapImage);
        }


        this.lstImageFromMediaLibrary.ItemsSource = lstBitmapImage;
    }

どんな助けでも感謝します、私が自分自身を明確にしたことを願っています....

編集:わかりましたので、今これをやっています

    BackgroundWorker backroungWorker = new BackgroundWorker();
    Popup popup = new Popup();
    public PanoramaPage1()
    {

        InitializeComponent();

        showpopup();
        init();
    }

    private void init()
    {
        backroungWorker.WorkerReportsProgress = true;
        backroungWorker.DoWork += new DoWorkEventHandler(backroungWorker_DoWork);
        backroungWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(backroungWorker_RunWorkerCompleted);
        backroungWorker.ProgressChanged+=new ProgressChangedEventHandler(backroungWorker_ProgressChanged);
        backroungWorker.RunWorkerAsync();
    }
     void backroungWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
    {
        this.Dispatcher.BeginInvoke(() =>
        {
            popup.IsOpen = false;
        }
        );
    }
     void backroungWorker_DoWork(object sender, DoWorkEventArgs e)
     {
         backroungWorker.ReportProgress(10);

     }
     void backroungWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)
     {
         this.InitializePage();
     }


    private void showpopup()
    {

        popup.Child = new SplashScreenControl();
        popup.Width = 480;
        popup.IsOpen = true;

    }

    private void InitializePage()
    {

        MediaLibrary mediaLibrary = new MediaLibrary();
        List<BitmapImage> lstBitmapImage = new List<BitmapImage>();
        foreach (Picture p in mediaLibrary.Pictures)
        {
            BitmapImage bitmapImage = new BitmapImage();
            bitmapImage.SetSource(p.GetThumbnail());
            lstBitmapImage.Add(bitmapImage);
        }


        this.lstImageFromMediaLibrary.ItemsSource = lstBitmapImage;
    }

それでも進行状況バーにはドットが表示されるだけで、他には何も表示されません.....

4

1 に答える 1

3

DoWorkイベントでユーザー インターフェイスにアクセスしています。ProgressChangedRunWorkerCompletedイベントなどのバックグラウンド ワーカー イベントを通じてアプリケーションと通信する必要があります。

最初のリンクから:

DoWork イベント ハンドラーでユーザー インターフェイス オブジェクトを操作しないように注意する必要があります。代わりに、BackgroundWorker イベントを介してユーザー インターフェイスと通信します。

于 2012-10-05T15:44:33.990 に答える