在线程里面要改变主进程的一个值,并通知主进程(如进度条),以及资源占用自动延时
来源:互联网 发布:剑网三卡卢比捏脸数据 编辑:程序博客网 时间:2024/05/22 06:21
1.
public delegate void Clear(); /// <summary> /// 检测生效时间是否已到,到了就进行覆盖 /// </summary> public void CoverData() { while (true) { if (!StopCover)//!StopCover { if (DateTime.Now >= EffectTime)//DateTime.Now >= EffectTime { //如果生效时间到了 //Thread.Sleep(2000); Invoke(new Clear(delegate(){ //委托类型 里面为匿名方法 mpy.currentPlaylist.removeItem(mpy.currentMedia); mpy.currentPlaylist.clear(); mpy.Ctlcontrols.stop();})); //清空当前文件夹 ClearDirectory(FilePath); //备份文件 if (!Directory.Exists(FileDefaultPath)) Directory.CreateDirectory(FileDefaultPath); foreach (string item in Directory.GetFiles(FileDownPath)) { File.Copy(item, FileDefaultPath + Path.GetFileName(item), true); } //覆盖 foreach (string item in Directory.GetFiles(FileDownPath)) { aa:try { File.Copy(item, FilePath + Path.GetFileName(item), true); } catch { Console.WriteLine("覆盖异常,重新覆盖!"); goto aa; } Console.WriteLine("文件:" + Path.GetFileName(item) + "覆盖成功!"); } Console.WriteLine("数据覆盖成功!"); StopCover = true; //数据同步完成,更新播放列表 InitializePlayList(); //重置播放列表 Console.WriteLine("播放列表更新成功!"); } } Thread.Sleep(0); } }
2.
delegate void SetTextCallback(string text); private void AddText(string text) { if (this.listBox1.InvokeRequired) { SetTextCallback d = new SetTextCallback(AddText); this.Invoke(d, new object[] { text }); } else { this.listBox1.Items.Insert(0, text); } }