pouria_bayat
دوشنبه 16 فروردین 1395, 18:55 عصر
سلام وقت بخیر
من برای بارگذاری تمامی فایلهای موجود در یک درایو یا فولدر و نمایش اونها توی فرم برنامه از کدهای زیر استفاده کردم و تمامی روشهای Parralel و تسک های موازی رو اجرا کردم ولی مشگل اینه که اگر تعداد فایلها زیاد باشه فرم تا اتمام بارگذاری هنگ میکنه نمونه کدها رو میزارم اگر میتونید کمک کنید تا فرم برنامه کاهش سرعت نداشته باشه ممنون
private void LoadFolderAndFilesPanel()
{
new Task(() =>
{
try
{
//Load Folders
InEachPanel = (PComp.Size.Width - 30) / FixedSize.Width;
int FileCount = FolderANdFileName[CS.Value].Files.Count();
int FolderCount = FolderANdFileName[CS.Value].Folders.Count();
FLPindex = 0;
NodeCounter = 0;
var tasks = new List<Task>();
for (int i = 0; i < FolderCount; i++)
{
int Idx = i;
tasks.Add(Task.Run(() =>
{
lock (LoadPanel)
{
CreateFolderPanel(Idx);
}
}));
}
Task.WaitAll(tasks.ToArray());
tasks.Clear();
for (int i = 0; i < FileCount; i++)
{
int Idx = i;
tasks.Add(Task.Run(() =>
{
lock (LoadPanel)
{
CreateFilePanel(Idx);
}
}));
}
Task.WhenAll(tasks.ToArray());
ProgressBar.Value = 0;
}
catch (Exception ex)
{
//
}
}).Start();
}
void CreateFilePanel(int index)
{
try
{
var act = new Action(() =>
{
if (NodeCounter >= InEachPanel || FLPindex == 0)
{
FLP.Add(new FlowLayoutPanel());
FLP[FLPindex].Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windo ws.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)));
FLP[FLPindex].FlowDirection = FlowDirection.LeftToRight;
FLP[FLPindex].WrapContents = false;
FLP[FLPindex].BackColor = System.Drawing.Color.Transparent;
FLP[FLPindex].Size = new Size(PComp.Size.Width - 30, FixedSize.Height + 9);
FLPindex++;
NodeCounter = 0;
MLP.Controls.Add(FLP[FLPindex - 1]);
MLP.Refresh();
}
if ((FolderANdFileName[CS.Value].FilesIsHidden[index].CompareTo(true) == 0 && CHBHiddenFilesAndFolders.Checked) || FolderANdFileName[CS.Value].FilesIsHidden[index].CompareTo(false) == 0)
{
FlowLayoutPanel SubFLP = new FlowLayoutPanel();
SubFLP.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windo ws.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)));
SubFLP.Name = " SubFLP" + index.ToString();
SubFLP.Size = FixedSize;
SubFLP.FlowDirection = FlowDirection.TopDown;
SubFLP.WrapContents = false;
SubFLP.Tag = index;
SubFLP.BackColor = System.Drawing.Color.Transparent;
//
PictureBox PBox = new PictureBox();
PBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windo ws.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)));
PBox.Enabled = true;
PBox.Name = FolderANdFileName[CS.Value].Files[index];
PBox.Tag = SubFLP;
PBox.AutoSize = true;
string[] RetExtenstion = FolderANdFileName[CS.Value].Files[index].Split('.');
if (RetExtenstion != null)
{
if (ImgLst.Images.Keys.Contains(RetExtenstion[RetExtenstion.Count() - 1] + ".png"))
{
PBox.Image = ImgLst.Images[RetExtenstion[RetExtenstion.Count() - 1] + ".png"];
}
else
PBox.Image = ImgLst.Images["blank.png"];
}
else
PBox.Image = ImgLst.Images["blank.png"];
PBox.Cursor = Cursors.Hand;
PBox.Click += new System.EventHandler(PBoxFile_Click);
PBox.MouseHover += PBox_MouseHover;
PBox.MouseLeave += PBox_MouseLeave;
var Margin = PBox.Margin;
int LeftMargin = ((FixedSize.Width - ImgLst.ImageSize.Width) / 2) - 2;
PBox.Margin = new System.Windows.Forms.Padding(LeftMargin, Margin.Top, Margin.Right, Margin.Bottom);
PBox.BackColor = Color.Transparent;
SubFLP.Controls.Add(PBox);
Label lblFileName = new Label();
lblFileName.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windo ws.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)));
lblFileName.Enabled = true;
lblFileName.BackColor = Color.Transparent;
lblFileName.Size = new System.Drawing.Size(FixedSize.Width - 5, 25);
lblFileName.TabIndex = 0;
lblFileName.Name = FolderANdFileName[CS.Value].Files[index];
lblFileName.Text = FolderANdFileName[CS.Value].Files[index];
lblFileName.Tag = SubFLP;
lblFileName.Cursor = Cursors.Hand;
lblFileName.Click += lblFile_Click;
lblFileName.MouseHover += lbl_MouseHover;
lblFileName.MouseLeave += lbl_MouseLeave;
lblFileName.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
System.Windows.Forms.ToolTip TT = new System.Windows.Forms.ToolTip();
TT.SetToolTip(lblFileName, FolderANdFileName[CS.Value].Files[index]);
SubFLP.Controls.Add(lblFileName);
FLP[FLPindex - 1].Controls.Add(SubFLP);
FLP[FLPindex - 1].Refresh();
NodeCounter++;
}
});
if (InvokeRequired)
BeginInvoke(act);
else
act();
}
catch (Exception ex)
{
//
}
}
من برای بارگذاری تمامی فایلهای موجود در یک درایو یا فولدر و نمایش اونها توی فرم برنامه از کدهای زیر استفاده کردم و تمامی روشهای Parralel و تسک های موازی رو اجرا کردم ولی مشگل اینه که اگر تعداد فایلها زیاد باشه فرم تا اتمام بارگذاری هنگ میکنه نمونه کدها رو میزارم اگر میتونید کمک کنید تا فرم برنامه کاهش سرعت نداشته باشه ممنون
private void LoadFolderAndFilesPanel()
{
new Task(() =>
{
try
{
//Load Folders
InEachPanel = (PComp.Size.Width - 30) / FixedSize.Width;
int FileCount = FolderANdFileName[CS.Value].Files.Count();
int FolderCount = FolderANdFileName[CS.Value].Folders.Count();
FLPindex = 0;
NodeCounter = 0;
var tasks = new List<Task>();
for (int i = 0; i < FolderCount; i++)
{
int Idx = i;
tasks.Add(Task.Run(() =>
{
lock (LoadPanel)
{
CreateFolderPanel(Idx);
}
}));
}
Task.WaitAll(tasks.ToArray());
tasks.Clear();
for (int i = 0; i < FileCount; i++)
{
int Idx = i;
tasks.Add(Task.Run(() =>
{
lock (LoadPanel)
{
CreateFilePanel(Idx);
}
}));
}
Task.WhenAll(tasks.ToArray());
ProgressBar.Value = 0;
}
catch (Exception ex)
{
//
}
}).Start();
}
void CreateFilePanel(int index)
{
try
{
var act = new Action(() =>
{
if (NodeCounter >= InEachPanel || FLPindex == 0)
{
FLP.Add(new FlowLayoutPanel());
FLP[FLPindex].Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windo ws.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)));
FLP[FLPindex].FlowDirection = FlowDirection.LeftToRight;
FLP[FLPindex].WrapContents = false;
FLP[FLPindex].BackColor = System.Drawing.Color.Transparent;
FLP[FLPindex].Size = new Size(PComp.Size.Width - 30, FixedSize.Height + 9);
FLPindex++;
NodeCounter = 0;
MLP.Controls.Add(FLP[FLPindex - 1]);
MLP.Refresh();
}
if ((FolderANdFileName[CS.Value].FilesIsHidden[index].CompareTo(true) == 0 && CHBHiddenFilesAndFolders.Checked) || FolderANdFileName[CS.Value].FilesIsHidden[index].CompareTo(false) == 0)
{
FlowLayoutPanel SubFLP = new FlowLayoutPanel();
SubFLP.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windo ws.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)));
SubFLP.Name = " SubFLP" + index.ToString();
SubFLP.Size = FixedSize;
SubFLP.FlowDirection = FlowDirection.TopDown;
SubFLP.WrapContents = false;
SubFLP.Tag = index;
SubFLP.BackColor = System.Drawing.Color.Transparent;
//
PictureBox PBox = new PictureBox();
PBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windo ws.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)));
PBox.Enabled = true;
PBox.Name = FolderANdFileName[CS.Value].Files[index];
PBox.Tag = SubFLP;
PBox.AutoSize = true;
string[] RetExtenstion = FolderANdFileName[CS.Value].Files[index].Split('.');
if (RetExtenstion != null)
{
if (ImgLst.Images.Keys.Contains(RetExtenstion[RetExtenstion.Count() - 1] + ".png"))
{
PBox.Image = ImgLst.Images[RetExtenstion[RetExtenstion.Count() - 1] + ".png"];
}
else
PBox.Image = ImgLst.Images["blank.png"];
}
else
PBox.Image = ImgLst.Images["blank.png"];
PBox.Cursor = Cursors.Hand;
PBox.Click += new System.EventHandler(PBoxFile_Click);
PBox.MouseHover += PBox_MouseHover;
PBox.MouseLeave += PBox_MouseLeave;
var Margin = PBox.Margin;
int LeftMargin = ((FixedSize.Width - ImgLst.ImageSize.Width) / 2) - 2;
PBox.Margin = new System.Windows.Forms.Padding(LeftMargin, Margin.Top, Margin.Right, Margin.Bottom);
PBox.BackColor = Color.Transparent;
SubFLP.Controls.Add(PBox);
Label lblFileName = new Label();
lblFileName.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windo ws.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)));
lblFileName.Enabled = true;
lblFileName.BackColor = Color.Transparent;
lblFileName.Size = new System.Drawing.Size(FixedSize.Width - 5, 25);
lblFileName.TabIndex = 0;
lblFileName.Name = FolderANdFileName[CS.Value].Files[index];
lblFileName.Text = FolderANdFileName[CS.Value].Files[index];
lblFileName.Tag = SubFLP;
lblFileName.Cursor = Cursors.Hand;
lblFileName.Click += lblFile_Click;
lblFileName.MouseHover += lbl_MouseHover;
lblFileName.MouseLeave += lbl_MouseLeave;
lblFileName.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
System.Windows.Forms.ToolTip TT = new System.Windows.Forms.ToolTip();
TT.SetToolTip(lblFileName, FolderANdFileName[CS.Value].Files[index]);
SubFLP.Controls.Add(lblFileName);
FLP[FLPindex - 1].Controls.Add(SubFLP);
FLP[FLPindex - 1].Refresh();
NodeCounter++;
}
});
if (InvokeRequired)
BeginInvoke(act);
else
act();
}
catch (Exception ex)
{
//
}
}