我的應用程序的一部分用於從預定義文件夾加載圖像。此時加載圖像需要更多時間。現在我需要一個進度條,可以讓我告訴加載進度。但我不知道如何在加載圖像時專門使用它。在C#中使用進度欄從文件夾加載圖像?
該函數通過將圖像導入名爲ImageList和Listview的控件來工作。 imageList將填充列表視圖。我認爲,這些控件是延遲的主要日常工作來顯示圖像:
this.lstView_un.View = View.LargeIcon;
lstView_un.LargeImageList = this.imageList1;
lstView_un.Items.Clear();
for (int j = 0; j < this.imageList1.Images.Count; j++)
{
ListViewItem item = new ListViewItem();
item.ImageIndex = j;
item.Text = imageList1.Images.Keys[j].ToString();
this.lstView_un.Items.Add(item);
}
見婁代碼查看詳細
任何一個可以幫助我嗎? 在此先感謝!
我有以下代碼從文件夾加載圖像。
private void LoadImages()
{
try
{
lstView_un.Items.Clear();
lstView_un.LargeImageList.Images.Clear();
DateTime d1 = DateTime.Now;
DateTime d2 = dtp_unlist.Value;
TimeSpan t = d1 - d2;
double NrOfDays = t.TotalDays;
if (d2 > d1)
{
MessageBox.Show("Please select before the current date!");
return;
}
DateTime dt = DateTime.Now.AddDays(-NrOfDays);
lstView_un.Items.Clear();
string imagesPath = (Application.StartupPath + "/UnknownFaces/");
string[] extensions = new[] { ".jpg", ".jpeg", ".png" };
var allfiles = Directory.GetFiles(imagesPath);
List<FileInfo> files = new List<FileInfo>();
foreach (string f in allfiles) files.Add(new FileInfo(f));
var filesSorted = files.Where(f => extensions.Contains(f.Extension.ToLower()))
.Where(f => f.CreationTime < dt)
.OrderByDescending(f => f.CreationTime);
this.imageList1.ImageSize = new Size(256, 256);
this.imageList1.ColorDepth = ColorDepth.Depth32Bit;
foreach (FileInfo fileInfo in filesSorted)
{
try
{
this.imageList1.Images.Add(fileInfo.Name,
Image.FromFile(fileInfo.FullName));
}
catch
{
Console.WriteLine(fileInfo.FullName + " is is not a valid image.");
}
}
this.lstView_un.View = View.LargeIcon;
lstView_un.LargeImageList = this.imageList1;
lstView_un.Items.Clear();
for (int j = 0; j < this.imageList1.Images.Count; j++)
{
ListViewItem item = new ListViewItem();
item.ImageIndex = j;
item.Text = imageList1.Images.Keys[j].ToString();
this.lstView_un.Items.Add(item);
}
}
catch (Exception ex)
{
MessageBox.Show("Something Wrong happen! "+ex.Message);
}
}
}
我目前的圖片加載形式以下進度條:
private void progressBar1_Click(object sender, EventArgs e)
{
}
我試着和:(它無法正常工作)
private void timer1_Tick(object sender, EventArgs e)
{
if (this.progressBar1.Value < 50) // Should be less than progress bar max value
{
this.progressBar1.Value++;
if (this.progressBar1.Value == 100) //The maximum value of the progress bar
{
LoadImages();// Image loads when reached the max value
}
}
else
{
this.timer1.Enabled = false;
}
}
我覺得背景工人很好,但我不知道如何使用它。 請任何人都可以幫助我,如果你知道的話。
在單獨的線程中儘可能多地完成工作,因此不會鎖定用戶界面。定期更新UI以顯示進度。例如,您可以使用BackgroundWorker及其ReportProgress機制。 –
好的,謝謝,很好的建議。我無法弄清楚如何使用它。請通過引用我的代碼來幫助我。 – usminuru