1. 程式人生 > >基礎1、非主執行緒修改控制元件文字

基礎1、非主執行緒修改控制元件文字

開發十年,就只剩下這套架構體系了! >>>   

假設 點選按鈕啟動一個執行緒

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);                
            }
        }