2016-08-31 3 views
0

내 picturebox에서 이미지를로드했는지 확인해야합니다. 그들을 만들고 ImageLocation을 제공합니다. 그림은 잠시 후에로드되지만로드되었는지 확인해야합니다. 사용해 보았습니다C# .NET 이미지가로드 된 경우

if(pb.ImageLocation != null){ 
Console.WriteLine("Loaded!"); 
} 

그러나 실제로로드되지 않은 경우에도로드 된 것으로 표시됩니다. 또한 나는 동적 생성 pictureboxes의 무리가 있습니다

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); 
     bricks[i].ImageLocation = @"Images/brick_wall.jpg"; 
     pb_bg.Controls.Add(bricks[i]); 
     brick.Add(bricks[i]); 
     i++; 
    } 

를 그리고 확인하는 방법 아무 생각이 ...

+0

으로 확인할 수 있습니까? 여기서 그림 상자를 동적으로 생성하고 물론 이미지가로드되지 않습니다 – Steve

+0

문자열 객체 –

+0

을 사용하여 이미지 위치의 시간에 확인할 수 있습니다. 별도의 스레드에서 확인합니다. – Morsus

답변

1

코드의 문제는 당신이 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"로하고, 오류가있는 것들에 대한 오류 메시지와 함께 표시합니다.

+0

이미지가로드되는 시점을 어떻게 알 수 있습니까? – Esko

+0

전혀로드하지 않아도됩니다. – Steve

+0

그래도 질문에 답하지 않으므로 대답이 아닙니다. – Esko

1

당신이 방법으로 ImageLocation을 할당 한 후 해당 PictureBox의 LoadCompleted 이벤트를 사용하려고 할 수 그것은 설명되어 있습니다 here

이미지가 비동기식으로로드되는지 확인할 수 있습니다.

pb.LoadCompleted += PictureBox1_LoadCompleted; 
: here

here는 다음과 같은 이벤트 핸들러를 할당 당신이 모양을 가질 수 유래에서 자세한 내용

pb.LoadAsync("some.gif"); 

:

pb.WaitOnLoad = false; 

그런 다음 비동기 적으로 이미지를로드

예제 이벤트 처리기에서 오른쪽으로,164,는 :

private void PictureBox1_LoadCompleted(Object sender, AsyncCompletedEventArgs e) { 
    System.Text.StringBuilder messageBoxCS = new System.Text.StringBuilder(); 
    messageBoxCS.AppendFormat("{0} = {1}", "Cancelled", e.Cancelled); 
    messageBoxCS.AppendLine(); 
    messageBoxCS.AppendFormat("{0} = {1}", "Error", e.Error); 
    messageBoxCS.AppendLine(); 
    messageBoxCS.AppendFormat("{0} = {1}", "UserState", e.UserState); 
    messageBoxCS.AppendLine(); 
    MessageBox.Show(messageBoxCS.ToString(), "LoadCompleted Event"); 
} 
+0

이것이 왜 downvoted인지 알 수 있습니까? –

+1

정답입니다! +1 LoadComplete 이벤트의 예를 추가 할 수 있습니다. – Esko

+0

추가되었습니다. 그것을 지적 주셔서 감사합니다. –

0
private stattic bool CheckUplodedImage() 
{ 
    bool return = false; 
    try 
    { 
     PictureBox imageControl = new PictureBox(); 
     imageControl.Width = 60; 
     imageControl.Height = 60; 

     Bitmap image = new Bitmap("Images/brick_wall.jpg"); 
     imageControl.Image = (Image)image; 

     Controls.Add(imageControl); 
     return true; 
    } 
    catch(Exception ex) 
    { 
    return false; 
    } 
} 

이러한 이미지가로드 또는하지 않으면 당신은 어디에서 확인합니까 그것의 반환

bool isUploded = CheckUplodedImage(); 
if(isUploded) 
{ 
    \\ ...uploaded 
    \\ Perform Operation 
} 
else 
    \\ not uploaded 
관련 문제