코드의 문제는 당신이 Load 또는 LoadAsync 메소드를 호출하지 않는 것입니다. 그런 다음 다음 이미지가 호출 후로드로드 방법을 사용하는 경우 LoadAsync를 사용하는 경우
void CreateBrick(int x,int y)
{
bricks[i] = new PictureBox();
bricks[i].Name = "pb_b" + i.ToString();
bricks[i].Location = new Point(y, x);
bricks[i].Size = new Size(60, 60);
// You can pass the path directly to the Load method
// bricks[i].ImageLocation = @"Images/brick_wall.jpg";
bricks[i].Load(@"Images/brick_wall.jpg");
pb_bg.Controls.Add(bricks[i]);
brick.Add(bricks[i]);
i++;
}
, 당신은 LoadComplete 이벤트에 대한 이벤트 처리기를 추가 할 수 있습니다.
bricks[i].LoadCompleted += onLoadComplete;
bricks[i].LoadAsync(@"Images/brick_wall.jpg");
....
private void onLoadComplete(Object sender, AsyncCompletedEventArgs e)
{
// Don't forget to check if the image has been really loaded,
// this event fires also in case of errors.
if (e.Error == null && !e.Cancelled)
Console.WriteLine("Image loaded");
else if (e.Cancelled)
Console.WriteLine("Load cancelled");
else
Console.WriteLine("Error:" + e.Error.Message);
}
당신이 LoadAsync 접근 방식을 사용하려면 여전히 어떻게 관련 그림 상자에 특정 이미지의 전체 부하와 일치하는 문제를 해결해야합니다. 이 문제는 LoadAsync의 sender 매개 변수를 사용하여 해결할 수 있습니다. 이 보낸 사람 매개 변수는 이미지로드를 완료 한 PictureBox입니다.
Tag 속성을 사용하고 "1"로 설정하여 그림 상자를로드 된 것으로 표시하고 문제가 발생한 경우 오류 메시지를 표시 할 수 있습니다. 당신의 벽돌 배열이 후
private void onLoadComplete(Object sender, AsyncCompletedEventArgs e)
{
PictureBox pic = sender as PictureBox;
// Don't forget to check if the image has been really loaded,
// this event fires also in case of errors.
if (e.Error == null && !e.Cancelled)
{
pic.Tag = "1";
Console.WriteLine("Image loaded");
}
else
{
pic.Tag = e.Error.Message;
Console.WriteLine("Cancelled:" + e.Error.Message);
}
}
pictureboxes는 태그의 속성은로드 된 사람을위한 "1"로하고, 오류가있는 것들에 대한 오류 메시지와 함께 표시합니다.
으로 확인할 수 있습니까? 여기서 그림 상자를 동적으로 생성하고 물론 이미지가로드되지 않습니다 – Steve
문자열 객체 –
을 사용하여 이미지 위치의 시간에 확인할 수 있습니다. 별도의 스레드에서 확인합니다. – Morsus