0

C# .NET で URL から画像を描画するアプリケーションを作成しています。問題は、この要素の読み込み中にアプリケーションがフリーズし、フォームの残りの部分が描画されないことです。これを防ぐ方法はありますか?

私が言おうとしているのは、他の言語のコルーチンのように、この操作を実行しながら残りのプログラムを実行し続ける方法があるということです。

        WebRequest aReq = WebRequest.Create(avatarURL);
        WebResponse aRes = aReq.GetResponse();

        Image img = Image.FromStream(aRes.GetResponseStream());

        e.Graphics.DrawImage(img, 10, 10, 55, 55);

スレッドを使用してみましたが、動作させることができず、コードは次のようになりました。

        Thread drawavatar = new Thread(new ThreadStart(() => drawAvatarDetails(e)));
        while (a_img != null)
        {
            e.Graphics.DrawImage(a_img, 10, 10, 55, 55);
        }

drawAvatarDetaails 内で、グローバル a_img をアバターの画像に割り当てます。

4

2 に答える 2

1

単に a を使用しBackGroundWorkerます。そして、DoWorkイベント内でこれを行います。もちろん、イメージをグローバル変数内に保持し、フォームのペイント (またはコントロール ペイント) イベントで描画することをお勧めします。

    BackgroundWorker bw;
    Image img;
    private void Form1_Load(object sender, EventArgs e)
    {
        bw = new BackgroundWorker();
        bw.DoWork += new DoWorkEventHandler(bw_DoWork);
        bw.RunWorkerAsync();
        this.Paint += new PaintEventHandler(Form1_Paint);
    }

    void Form1_Paint(object sender, PaintEventArgs e)
    {
        if (img != null)
        {
            e.Graphics.DrawImage(img, 10, 10, 55, 55);
        }
    }

    void bw_DoWork(object sender, DoWorkEventArgs e)
    {
        WebRequest aReq = WebRequest.Create(avatarURL);
        WebResponse aRes = aReq.GetResponse();
        img = Image.FromStream(aRes.GetResponseStream());
    }
于 2013-04-20T18:29:17.920 に答える