我有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,它已被添加到设计器中的表单?
答案 0 :(得分:4)
您忘记在第二个构造函数中初始化组件。因此没有调用Nullpointer因为没有图片,而是因为pictureBox没有被初始化
public TestImageForm(Image img)
{
InitializeComponent();
bevImg = img;
displayImage();
}