2016-07-14 9 views
0

Ich versuche, Viewer für IP-Kamera nur zu machen. Keine große Sache, aber ich kam zu einem Problem, in das Bild geöffnet und geladen in picturebox1 aber es wird nicht zu aktualisieren, ganz gleich, ob ich Timer in timer1-500 (ms)Bild von IP-Kamera laden und in PictureBox1 zeigen

Code:

public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void Form1_Load(object sender, EventArgs e) 
    { 
     string url = "http://IPofIPCamera/now.jpg"; 
     WebClient webClient = new WebClient(); 
     CredentialCache myCache = new CredentialCache(); 
     myCache.Add(new Uri(url), "Basic", 
      new NetworkCredential("SomeUser", "SomePass")); 
     webClient.Credentials = myCache; 
     MemoryStream imgStream = new MemoryStream(webClient.DownloadData(url)); 
     pictureBox1.Image = new System.Drawing.Bitmap(imgStream); 
    } 

    private void timer1_Tick(object sender, EventArgs e) 
    { 
     pictureBox1.Update(); 
    } 
} 

Mit diesem Code PictureBox1 ist Bild von URL geladen, wird aber nicht aktualisiert. Was mache ich falsch?

+2

löst 'pictureBox1.Update()' den Download erneut aus? Ich bezweifle das stark und glaube, dass du eine Methode zum Herunterladen und Einstellen des Bildes auf "pictureBox1.Image" extrahieren solltest, was durch das Häkchen des Timers ausgelöst wird ... –

+0

Ich denke, du musst die zwei letzten Zeilen ausführen aus 'Form1_Load' in' timer1_Tick' (und extrahiere die benötigten lokalen Variablen). – Philippe

+0

Das Aktualisieren von 'pictureBox1' ist nicht genug. Sie müssen das Bild von der Kamera neu herunterladen, was bedeutet, dass Sie den 'Form1_Load()' Code in 'time1_Tick()' erneut ausführen müssen –

Antwort

1

Also, Sie haben ein Missverständnis, wie PictureBox.Update Werke, die here beschrieben:

Verursacht das Steuerelement die für ungültig erklärten Bereiche im Clientbereich neu zu zeichnen.

Dies bedeutet, dass der Download nicht erneut ausgelöst wird.

Um Ihr Problem zu lösen, sollten Sie eine Methode zum Herunterladen und Einstellen des Bildes extrahieren, die durch das Häkchen Ihres Timers ausgelöst wird.

public void DownloadAndUpdatePicture() 
{ 
    string url = "http://IPofIPCamera/now.jpg"; 
    WebClient webClient = new WebClient(); 
    CredentialCache myCache = new CredentialCache(); 
    myCache.Add(new Uri(url), "Basic", new NetworkCredential("SomeUser", "SomePass")); 
    webClient.Credentials = myCache; 
    MemoryStream imgStream = new MemoryStream(webClient.DownloadData(url)); 
    pictureBox1.Image = new System.Drawing.Bitmap(imgStream); 
} 

private void Form1_Load(object sender, EventArgs e) 
{ 
    this.DownloadAndUpdatePicture(); 
} 

private void timer1_Tick(object sender, EventArgs e) 
{ 
    this.DownloadAndUpdatePicture(); 
}