![](/img/trans.png)
[英]How can I make a WinForms Form work as a DockableContent in AvalonDock?
[英]How can i make pictureboxe on the form more fastly on runtime in .net winforms?
我想選擇圖片(它們是在程序運行時選擇的),並在窗體上顯示它們。 為此,我在窗體上放置一個面板,並在面板中填充pictureboxes。為此,我編寫了以下代碼,但這非常耗時:
if(openDialoge1.ShowDialog() == DialogResult.OK)
{
string[] fileName = open.FileNames;
foreach (string s in fileName)
{
pBox = new PictureBox();
pBox.Size = new System.Drawing.Size(w, h);
pBox.Location = new System.Drawing.Point(x, y);
pBox.Image = Image.FromFile(s);
pBox.SizeMode = PictureBoxSizeMode.StretchImage;
.
.//here i add some eventHandler of picture boxes.
this.panel1.Controls.Add(pBox);
x += pBox.Width + 4;
}
} //here w,h,x,y are integers.
該代碼可以很好地工作,但是非常耗時,並且需要花費大量時間在面板上安裝圖片框。 例如,當我選擇20,30張照片時,它會花費很多時間。 有什么方法可以減少用圖片框填充面板的時間。
提前致謝。
您可以考慮分析您的方法。 如果沒有像ANTS這樣的分析器,則可以自己滾動:
Stopwatch watch = new Stopwatch();
watch.Start();
//code to profile goes here
watch.Stop();
Console.Writeln("Elapsed time: " + watch.Elapsed.TotalMilliseconds + "ms");
這將幫助您查明代碼的哪一部分是緩慢的。
我現在可以告訴您,Image.FromFile()可能是最慢的部分。 您可能考慮的是先使用單獨的線程或后台工作程序將圖像加載到List <>中。 這將使您顯示進度條或沙漏,以使用戶知道正在從磁盤讀取圖像。
一旦圖像存儲在內存中,創建圖片框的速度將大大加快。
編輯:
您已請求一個示例,該示例演示如何首先將圖像加載到內存中。 這很簡單:
// this code should run in its own thread - BackgroundWorker is perfect for this
List<Image> images = new List<Image>();
foreach (string imagePath in paths)
{
images.Add(Image.FromFile(imagePath));
// update progress bar here?
}
現在,您有了圖像列表,可用於填充圖片框。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.