private void fileRun(Object o) { string[] fileNames = this.fileNames; List <string> newFileNames = new List <string>(fileNames.Length); for (int i = 0; i < fileNames.Length; i++) { string fileName = fileNames[i].Substring(fileNames[i].LastIndexOf("\\") + 1); string fileNameExt = fileName.Substring(fileName.LastIndexOf(".") + 1); string filter = "xls,xlsx"; if (!filter.Contains(fileNameExt))//文件类型不满足条件 { MessageBoxEx.Show(this, "文件格式不正确!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); break; } else { newFileNames.Add(fileNames[i]); } } //提取excel数据,并把数据绑定到grid中 this.localEmails = myUtils.extractExcelData(newFileNames, saveFilePath); //把邮件信息缓存起来,方便发送的时候使用 myUtils.addOrUpdateCache(SysConstant.CACHE_EMAILS, this.localEmails); //执行回调 FileCallBackDelegate cbd = o as FileCallBackDelegate; cbd(this.localEmails); }
private void FileCallBack(List <Email> emails) { if (this.dataGridView1.InvokeRequired) { //不同一个线程 FileCallBackDelegate fc = new FileCallBackDelegate(FileCallBack); Invoke(fc, this.localEmails); //执行唤醒操作 } else {//同一个线程 this.bs.DataSource = this.localEmails; this.dataGridView1.DataSource = this.bs; } //把文件选择框和文件夹选择线程关闭 for (int i = 0; i < this.threadList.Count; i++) { if (this.threadList[i].Name.Equals("file") || this.threadList[i].Name.Equals("folder")) { if (this.threadList[i].IsAlive) { this.threadList[i].Abort(); this.threadList.Remove(this.threadList[i]); } } } //资源回收 GC.Collect(); }
/// <summary> /// 文件选择框 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void 文件ToolStripMenuItem_Click(object sender, EventArgs e) { OpenFileDialog dialog = new OpenFileDialog(); dialog.Multiselect = true; dialog.Title = "选择文件"; dialog.Filter = "*.xls|*.xls|*.xlsx|*.xlsx"; DialogResult dr = dialog.ShowDialog(); if (dr == DialogResult.OK) { DialogResult result = MessageBoxEx.Show(this, "确定要导入该数据吗?导入数据可能会花一段时间,请耐心等待!", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question); if (result == DialogResult.OK) { this.fileNames = dialog.FileNames; //新开一个线程,用来操作文件的读取 FileCallBackDelegate cbc = FileCallBack; Thread threadFile = new Thread(new ParameterizedThreadStart(fileRun)); threadFile.IsBackground = true; threadFile.Name = "file"; threadFile.Start(cbc); this.threadList.Add(threadFile); } } }
private void folderRun(Object o) { DirectoryInfo TheFolder = new DirectoryInfo(this.folderFullName); List <string> listFolder = new List <string>(); listFolder.Add(this.folderFullName); List <string> listFile = new List <string>(); //遍历文件夹 foreach (DirectoryInfo NextFolder in TheFolder.GetDirectories()) { listFolder.Add(NextFolder.FullName); } for (int i = 0; i < listFolder.Count; i++) { DirectoryInfo folder = new DirectoryInfo(listFolder[i]); //遍历文件 foreach (FileInfo NextFile in folder.GetFiles()) { string fileFullName = NextFile.FullName; //只获取excel文件 string fileName = fileFullName.Substring(fileFullName.LastIndexOf("\\") + 1); string fileNameExt = fileName.Substring(fileName.LastIndexOf(".") + 1); string filter = "xls,xlsx"; if (filter.Contains(fileNameExt)) { listFile.Add(fileFullName); } } } if (listFile.Count == 0) { MessageBoxEx.Show(this, "没有需要导入的文件!", "提示", MessageBoxButtons.AbortRetryIgnore, MessageBoxIcon.Warning); return; } //提取excel数据,并把数据绑定到grid中 this.localEmails = myUtils.extractExcelData(listFile, saveFilePath); //把邮件信息缓存起来,方便发送的时候使用 myUtils.addOrUpdateCache(SysConstant.CACHE_EMAILS, this.localEmails); //执行回调 FileCallBackDelegate cbd = o as FileCallBackDelegate; cbd(this.localEmails); }
/// <summary> /// 文件夹选择框 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void 文件夹ToolStripMenuItem_Click(object sender, EventArgs e) { FolderBrowserDialog dialog = new FolderBrowserDialog(); DialogResult dr = dialog.ShowDialog(); if (dr == DialogResult.OK) { DialogResult result = MessageBoxEx.Show(this, "确定要导入该数据吗?导入数据可能会花一段时间,请耐心等待...", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question); if (result == DialogResult.OK) { this.folderFullName = dialog.SelectedPath; //新开一个线程,用来操作文件的读取 FileCallBackDelegate cbc = FileCallBack; Thread threadFolder = new Thread(new ParameterizedThreadStart(folderRun)); threadFolder.IsBackground = true; threadFolder.Name = "folder"; threadFolder.Start(cbc); this.threadList.Add(threadFolder); } } }