从互联网下载图像时在C#中进行多线程处理

Rog*_*ger 2 c# multithreading

我有一个从互联网加载图像的功能.然而,在加载时,我的应用程序无法执行任何其他操作.有没有解决的办法?

谢谢!

这是我的代码:

public static Bitmap BitmapFromWeb(string URL)
{
    try
    {
        HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(URL);
        myRequest.Method = "GET";
        HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
        Bitmap bmp = new Bitmap(myResponse.GetResponseStream());
        myResponse.Close();
        return bmp;
    }
    catch (Exception ex)
    {
        return null;
    }
}


private void button1_Click(object sender, EventArgs e)
{
    load_avatrar();
}


private void load_avatrar()
{
    pictureBox_avatar.Image = BitmapFromWeb(avatral_url);
}
Run Code Online (Sandbox Code Playgroud)

Mat*_*ira 7

看看BackgroundWorker.它意味着在另一个线程中运行这些类型的操作来释放您的应用程序.

UPDATE

根据您的代码,您可以使用BackgroundWorker,具有以下内容:

private void BackgroundWorker_DoWork(object sender, DoWorkEventArgs args)
{
    Bitmap b = BitmapFromWeb("some string");
    this.Invoke((MethodInvoker)SOME_METHOD_USING_BITMAP(b));
}
Run Code Online (Sandbox Code Playgroud)

当位图完成下载时,SOME_METHOD_USING_BITMAP将使用结果调用,您可以相应地更新UI.

更新2

SOME_METHOD_USING_BITMAP将是你的load_avatar方法.它有一个类型的参数Bitmap:

private void load_avatar(Bitmap avatar)
{
    pictureBox_avatar.Image = avatar;
}
Run Code Online (Sandbox Code Playgroud)