2012-05-23 76 views
0

我目前正在編寫一個C#應用程序,它在窗體上使用PictureBox顯示圖像。更新Picturebox中的圖像

現在,我想要一致地更新此圖像(例如,每隔2秒)。但我無法做到這一點。

因爲新圖像也是相同的文件目錄/名稱,它將替換加載的原始圖像。所以當我想替換它顯示的圖像時,「文件正在被另一個程序使用......等等)」。

基本上,我想使用PictureBox來加載圖像,並且隨着加載的圖像在其目錄中被更改,該圖像將一致更新。

這可能嗎?有沒有其他方式在C#中做到這一點?

由於事先 Perumal

回答

1

聽起來好像流沒有關閉。嘗試在加載圖像後致電stream.close();。如果你像這樣加載你的圖像Image i = new Image(File.Open("blub.png"));那麼你將不得不重寫它有點像這樣;

FileStream fs = File.Open("blub.png"); 
Image img = new Image(fs); 
fs.Close(); 
fs.Dispose(); 
0

只需使用一個計時器(在下面的示例中稱爲timeImageChange)並將文件重命名爲兩個不同的文件名。那麼你可以有類似的東西

bool imageALoaded = true; 
timerImageChange.Interval = 2000; 
timerImageChange.Enabled = true; 

private void timerImageChange_Tick(object sender, EventArgs e) 
{ 
    if (imageALoaded) 
    { 
     this.pictureBox1.Image = imageB; 
     imageALoaded = false; 
    } 
    else 
    { 
     this.pictureBox1.Image = imageA; 
     imageALoaded = true; 
    } 
} 

這應該做你想做的。

我希望這會有所幫助。

0

我最好的解決方案是使用可執行文件,它被稱爲卷影副本。這實際上用於Windows備份,因爲它允許您複製正在使用的文件。實際上,我沒有使用C#代碼嘗試過這個工具,但它很容易在代碼中使用。

這裏是一個鏈接:http://www.howtogeek.com/howto/windows-vista/backupcopy-files-that-are-in-use-or-locked-in-windows/

我的想法是與另一個名稱的文件的副本,並訪問該文件,然後在你旁邊的刪除負載,我看到,是最適合你的方法。