0

今日、この「興味深い」問題に遭遇しました。wpf ウィンドウにボタンがあり、それを押すと、四角形が表示され、メイン ウィンドウのサイズに拡大されます。次に、長方形の内側に保持されたテキストを中央に揃えます。これが発生したら、スクリプトで Web からイメージをダウンロードして実行を開始します。しかし...ボタンを押しても四角形が表示されず、代わりにexeが画像のダウンロードを開始します...コードを順番に実行する必要があると思いました...

On button_1 press(blah blah){

expander1.IsExpanded = false; //just an expander i use to hide a few elements

            pleasewait.Visibility = Visibility.Visible; //pleasewait - rectangle
            plswait_label.Visibility = Visibility.Visible; // plswait_lable - label
            pleasewait.Height = window_main.Height;
            pleasewait.Width = window_main.Width;
            plswait_label.HorizontalAlignment = HorizontalAlignment.Center;
            plswait_label.VerticalAlignment = VerticalAlignment.Center;

            image1.Source = null; // dumping previous image before downloading a new one



//This is the script to download the image and do some other stuff..
    string path = System.IO.Path.GetDirectoryName(System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName);

    Uri urlUri = new Uri(address.Text);
    var request = WebRequest.CreateDefault(urlUri);

    byte[] buffer = new byte[4096];

    using (var target = new FileStream(path + @"\Temp\br_temp.png", FileMode.Create, FileAccess.Write))
    {
        using (var response = request.GetResponse())
        {
            using (var stream = response.GetResponseStream())
            {
                int read;

                while ((read = stream.Read(buffer, 0, buffer.Length)) > 0)
                {
                    target.Write(buffer, 0, read);
                }
            }
        }
    }


    Bitmap resizedImage;
    System.Drawing.Size newSize = new System.Drawing.Size(266, 150);

    using (System.Drawing.Image originalImage = System.Drawing.Image.FromFile(path + @"\Temp\br_temp.png"))
        resizedImage = new System.Drawing.Bitmap(originalImage, newSize);
    resizedImage.Save(path + @"\Temp\temp.png", System.Drawing.Imaging.ImageFormat.Jpeg);
    resizedImage.Dispose();

    BitmapImage MainImage = new BitmapImage();
    MainImage.BeginInit();
    MainImage.UriSource = new Uri(path + @"\Temp\temp.png");
    MainImage.DecodePixelWidth = 266;
    MainImage.DecodePixelHeight = 150;
    MainImage.EndInit();
    image1.Source = MainImage;
}

おもしろいことに、ダウンロード コードを削除すると、長方形は実際に私がやりたいことを実行します..

4

1 に答える 1

1

ダウンロードが UI スレッドをブロックしています。ダウンロードが完了するまで、UI は何も機能しません。

ダウンロード コードを UI スレッドから移動する必要があります。

これを行う簡単な方法は、BackgroundWorkerを使用することです。

いつものように、Joe Albahari の電子ブックを読むことをお勧めします

于 2012-04-28T14:53:08.827 に答える