基礎1、非主執行緒修改控制元件文字
阿新 • • 發佈:2019-03-11
假設 點選按鈕啟動一個執行緒
Thread t1 = new Thread(() => RunAddFile(tb_file.Text.Trim())); //建立一個執行緒
t1.Start();
現在線上程中修改主執行緒建立的控制元件tb_log的文字
#region 自定義方法RunAddFile主要是通過執行緒序來實現對資料夾下所有子資料夾和檔案的遍歷
/// <summary>
/// path 是路徑
/// </summary>
/// <param name="path"></param>
public void RunAddFile(string path)
{
DirectoryInfo dir = new DirectoryInfo(path);
DirectoryInfo dirD = dir as DirectoryInfo;
FileSystemInfo[] files = dirD.GetFileSystemInfos();
foreach (FileSystemInfo i in files) //對單個FileSystemInfo進行判斷,如果是資料夾則進行遞迴操作
{
//如果是資料夾
//System.Windows.Forms.MessageBox.Show(i.Name+" "+i.FullName);
FileInfo file = i as FileInfo;
if (file != null)
{
AddOkPath(file.DirectoryName + "\\" + file.Name);
}
else
{
string newpath = "";
newpath = i.FullName;
RunAddFile(newpath);
}
}
}
/// <summary>
/// 修改 日誌
/// </summary>
/// <param name="path"></param>
private void AddOkPath(string path) {
if (this.tb_log.InvokeRequired)
{
Action<string> actionDelegate = delegate(string txt)
{
StringBuilder sb = new StringBuilder();
sb.Append(tb_log.Text + System.Environment.NewLine);
sb.Append("目錄:" + txt + System.Environment.NewLine);
tb_log.Text = sb.ToString();
//RunAddFile(txt); //這句導致 報 未將引用物件設定到例項
li_img.Add(path);
};
this.tb_log.Invoke(actionDelegate, path);
}
}