WinForm运用多线程与Timer类以后无法关闭窗体

狼王_ 2016-09-14 03:20:04
运用 多线程下载方法 MultiDownload 做的下载,然后用Timer类去监视是否下载完成,下载完成后弹出提示,然后关闭窗口,现在能弹出提示,但是点击确定后无法关闭窗体。求指导。。。
private void VersionUpdate_Shown(object sender, EventArgs e)
{
WebClient myclient = new WebClient();
MessageBox.Show("发现新版本,请选择下载路径!");
FolderBrowserDialog path = new FolderBrowserDialog();
path.ShowDialog();
String strDir = path.SelectedPath;
String strFileName= System.IO.Path.GetFileName(strUpdateUrl);
md = new MultiDownload(5, strUpdateUrl, strDir + "\\" + strFileName);
t.Start();
md.Start();
t.Elapsed += new System.Timers.ElapsedEventHandler(DownLoadComplete);
}

public void DownLoadComplete(object sender, System.Timers.ElapsedEventArgs e)
{
if (md.IsComplete && IsGoon)
{
IsGoon = false;
MessageBox.Show("最新安装包已经下载完成。");
}
if (!IsGoon)
{
t.Stop();
t.Dispose();
this.Close();
}
}
...全文
433 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaha3 2016-09-14
  • 打赏
  • 举报
回复
public void DownLoadComplete(object sender, System.Timers.ElapsedEventArgs e) { if (md.IsComplete && IsGoon) { IsGoon = false; if (!IsGoon) { t.Stop(); t.Dispose(); } MessageBox.Show("最新安装包已经下载完成。"); } this.Close(); } //应该先暂停timer吧,不然一直轮训,可能就出现多个未完成的线程,一次timer就是一个新线程, 另外MultiDownload没有完毕后的回调函数?好奇怪
yang1216 2016-09-14
  • 打赏
  • 举报
回复
帮顶一下。。。
  • 打赏
  • 举报
回复
比如说程序逻辑需要“当某个属性改变时则......”,有的人也说“监视这个属性是否改变,然后.......”。凡是你遇到这种说法的,如果不是初学者,如果是一些自称为已经从事编程工作1、2年的人,我们就都知道这些人肯定是大忽悠、虽然是编程出身但是可能做的是推销员、根本没有实际的开发经验。 滥用“监视”二字是在初学者的想象中才高大上的,有经验的人在设计产品中早就消除了这些毛病。
  • 打赏
  • 举报
回复
引用 楼主 zaocha321 的回复:
运用 多线程下载方法 MultiDownload 做的下载,然后用Timer类去监视是否下载完成,下载完成后弹出提示
根本跟 timer 没有关系,从你的逻辑中去掉 timer。 一个事件、以及在不在UI 线程执行代码,都跟 timer 没有关系。滥用 timer 在一些实习生中是一个比较容易出现的问题,相当于往人家一锅鲜嫩的汤里偷偷地边撒了一把老鼠屎,它让程序变慢、逻辑混乱、难以立刻察觉让程序“卡顿”的根源。 遇到事件相关的设计,不要用什么“死循环、轮询”的思路去模拟。虽然你用 timer 去试图改进“死循环”的逻辑,但是并没有改变本质。要改变本质也许对一些人来说有点困难,有点不理解,但是这是最基本的技能,不学会正确的设计模式就不能正式上岗工作。

62,272

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧