簡體   English   中英

如何在.net Winforms中的運行時上更快地在窗體上創建圖片框?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM