2016-03-11 70 views
1

所以,主題是自己描述我的問題,但我會在這裏添加一些通知。我有大約20 PictureBox控件,當表單出現時,需要0.5秒來加載它們。我嘗試附加nvapi.dll以啓用硬件渲染,但看起來問題在於其他方面。所以基本上我需要在多線程模式下渲染20個圖像,這樣會更快。多線程的PictureBox控件渲染

+1

您只有一個UI線程。你確定「渲染」是瓶頸嗎? – CodeCaster

+0

不太確定。特別是有沒有創建額外的用戶界面線程PictureBox控件的方法? – Purixi

+0

使用一個圖片框並使用gdi +在圖片框的背景上繪製20張圖片。 –

回答

1

您可以使用PictureBoxLoadAsync方法異步加載圖片:

this.pictureBox1.LoadAsync(imagePath); 

調用到LoadAsync方法設置 ImageLocation 屬性URL的值。除了調用LoadAsync方法, 您必須將 WaitOnLoad屬性設置爲false(默認值)才能異步加載圖像。

+0

我已經在使用它。 'WaitOnLoad'也設置爲'true'。對不起,但我忘了提到這一點。 – Purixi

+0

['WaitOnLoad'](https://msdn.microsoft.com/en-us/library/system.windows.forms.picturebox.waitonload(v = vs.110).aspx)應設置爲'false' –

+0

好吧,它看起來像只在'BackgroundImage'設置爲某個圖像時纔會加載緩慢。我將'BackgroundImageLayout'設置爲'Tile'使用'1024x768'的紋理。 – Purixi

1

簡單的答案是,你不能多線程渲染圖像到picturebox控件,但是;

(1)你提到裝載20倍1024×768的圖像 - 您的用戶不能看到所有的一次,所以有負載的「及時」的方式,而不是如「以防萬一」

(2)你絕對可以從文件中多線程加載圖像,然後使用UI上的Invoke()函數將加載線程中創建的圖像分配給pictureBox.Image。

+0

你的事實是假設,很明顯可以發現。我總是知道這一點,無論如何,感謝關於'Invoke()'的信息。 – Purixi