2014-06-25 293 views
0

我有一個應用程序有一個列表框和一個圖片框。我需要的是當ListBox.IndexChanged事件被觸發時,PictureBox圖像需要更新或刷新。PictureBox圖像不會更新/刷新

編輯:第一次從列表中選擇的東西,圖像加載,但是當我選擇另一個項目,圖像不更新。

我已經沒有運氣都嘗試:

PictureBox1.Refresh(); 
PictureBox1.Update(); 

在後臺,當爲ListBox的指數改變我跑去一個特定的網頁,並根據所產品採取截圖的腳本在列表框中選擇並替換當前的圖像框的圖像。我在想,也許我只是wasnt給它時間去獲得圖像,所以我沒有運氣嘗試這樣做,以及:

System.Threading.Thread.Sleep(3000); 

這裏是應用程序的樣子:

enter image description here

這裏是什麼是對的ListBox1.IndexChanged事件:

Process myProcess; 
myProcess = Process.Start("C:/users/bnickerson/desktop/script/RegScript.cmd"); 
System.Threading.Thread.Sleep(5000); 
myProcess.Close(); 
string imgLoc = "C:/users/bnickerson/Desktop/script/result/last.png"; 
pictureBox1.Image = Image.FromFile(imgLoc); 
pictureBox1.Update(); 
+1

你將不得不驗證當加載它時last.png圖片的樣子。只是猜測3秒的等待時間並不是一種非常可靠的方式來做你正在做的事情。 – LarsTech

+1

這是非常不可靠的代碼,你不知道腳本需要多長時間,或者它是否成功地完成了它的工作。使用Process.Exited事件是最低要求。 Image.FromFile()也會對文件加鎖,所以再次運行該腳本會使其失敗,可能無法識別,因爲您沒有檢查Process.ExitCode屬性。丟失.cmd文件,它所做的任何事情都可以在C#中更好地完成。 –

+0

我會更新代碼,使其更可靠,一旦我可以找出如何更新圖像。我確認腳本正在運行並在等待時間結束之前完成。它只是不更新​​。 – Prokzy

回答

1

正如漢斯指出,圖像文件被鎖定,直到返回Image對象是Disposed。試試這個:

using (Process ExternalProcess = new Process()) 
{ 
    ExternalProcess.StartInfo.FileName = @"C:\users\bnickerson\desktop\script\RegScript.cmd"; 
    ExternalProcess.Start(); 
    ExternalProcess.WaitForExit(); 
} 

string imgLoc = @"C:\users\bnickerson\Desktop\script\result\last.png"; 
if (pictureBox1.Image != null) { pictureBox1.Image.Dispose(); } 
using (Image myImage = Image.FromFile(imgLoc)) 
{ 
    pictureBox1.Image = (Image)myImage.Clone(); 
    pictureBox1.Update(); 
} 
+0

感謝您的回覆。我實現了你的代碼,它似乎仍然不想更新圖像。一旦第一張圖片加載完畢,當我點擊另一個選項時,它就會停留在那裏。 – Prokzy

+0

你確定代碼已經運行? myuImage實際上是保存圖像還是爲空等?另一種選擇是隻加載一次所有使用的圖像,並添加對類的根的引用。 – W0lfw00ds