假设 点击按钮启动一个线程
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);
}
}