c# - 从 Internet 下载图像时在 C# 中使用多线程

标签 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);
}

最佳答案

看看BackgroundWorker .它旨在在另一个线程中运行这些类型的操作以释放您的应用程序。

更新

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

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

位图下载完成后,将调用 SOME_METHOD_USING_BITMAP 并获取结果,您可以相应地更新 UI。

更新 2

SOME_METHOD_USING_BITMAP 将是您的 load_avatar 方法。让它接受类型为 Bitmap 的参数:

private void load_avatar(Bitmap avatar)
{
    pictureBox_avatar.Image = avatar;
}

关于c# - 从 Internet 下载图像时在 C# 中使用多线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5300788/

相关文章:

使用反射的 C# 类型比较

c# - 如何使用 c# 在 asp.net 中生成文本框单击事件

c# - 如何使用 Parallel.For(..) 在主线程上填充 List<T>

c# - .NET 多线程。即时更新 UI

c# - 列名应该在所有表中是唯一的吗?

c# - Farseer 库的 XNA Vector2 模棱两可的问题

c# - 播放背景音乐地铁应用

c++ - 当其中一个线程较早结束时终止所有线程 C++

java - 一会儿,两个服务器线程互相阻塞

java - 您什么时候想使用两个缓存的线程池?