NullReferenceException - 设置PictureBox的Image属性 - Winforms

时间:2013-11-16 22:33:13

标签: c# winforms asynchronous nullreferenceexception

我有async方法从网址下载图片,然后创建一个新表单,其中图片应显示在PictureBox内。

这是我下载图片的方式:

private void downloadImage(string url)
{
    WebClient client = new WebClient();
    client.OpenReadCompleted += new OpenReadCompletedEventHandler(client_OpenReadCompleted);
    client.OpenReadAsync(new Uri(url, UriKind.Absolute));
}

void client_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
{
    Bitmap bmi = new Bitmap(e.Result);
    bevImg = bmi;
    Console.WriteLine("Image dimensions: " + bevImg.Size);
    TestImageForm tif = new TestImageForm(bevImg);
    tif.Show();
}

这是要显示图像的类,以及抛出NRE的位置:

public partial class TestImageForm : Form
{
    Image bevImg;
    public TestImageForm()
    {
        InitializeComponent();
    }

    public TestImageForm(Image img)
    {
        bevImg = img;
        displayImage();
    }

    private void displayImage()
    {
        if (bevImg != null)
            this.pictureBox1.Image = bevImg;
    }
}

我在调用图片框的set属性的行上获得NRE;

this.pictureBox1.Image = bevImg;

当我运行代码时,控制台打印出Image dimensions: {Width=180, Height=360},当我将其与我要下载的图像的尺寸进行比较时,这是正确的。

我不明白它在NRE中引用了什么。图像清晰必须下载,否则不会调用EventHandler?它是以某种方式引用我的pictureBox,它已被添加到设计器中的表单?

1 个答案:

答案 0 :(得分:4)

您忘记在第二个构造函数中初始化组件。因此没有调用Nullpointer因为没有图片,而是因为pictureBox没有被初始化

public TestImageForm(Image img)
{
    InitializeComponent();
    bevImg = img;
    displayImage();
}