C# 多线程 winform 弹出连个窗口,而且会卡住 咋办?

yxy10072510329 2010-08-23 09:45:54
private  void calcu()
{
Thread th = new Thread(new ThreadStart(SubFormShowDialog));
th.SetApartmentState(ApartmentState.MTA);
th.Start();
where(bool)
{
。。。。这里是读取一个文件夹所有文件的代码,并记录当前读了多少个文件到全局静态变量,供多进程的winform使用。。。
}
}

private void SubFormShowDialog()
{
if (this.InvokeRequired)
this.BeginInvoke(new MethodInvoker(SubFormShowDialog));
{
StatusForm sf = new StatusForm();
sf.ShowDialog();
}
}


代码如上,窗口是弹出来了,但是弹出了两个,而且当文件夹内文件非常多的时候会卡死,求高人帮解决,在线F5等!
...全文
678 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
q297520674 2012-07-13
  • 打赏
  • 举报
回复
求源代码 我现在一个程序卡死在进度条这边
zylhx2002 2010-08-23
  • 打赏
  • 举报
回复
你是说的哪一部分的循环啊?
yxy10072510329 2010-08-23
  • 打赏
  • 举报
回复
zylhx2002 解决了窗口重复问题,谁帮解决一下卡死问题啊,是不是 th.Start(); 后面的循环导致的卡死(一直到循环结束才正常)
zylhx2002 2010-08-23
  • 打赏
  • 举报
回复
private void button1_Click(object sender, EventArgs e)
{
Thread th = new Thread(new ThreadStart(SubFormShowDialog));
th.SetApartmentState(ApartmentState.MTA);
th.Start();
}

private void SubFormShowDialog()
{
//if (this.InvokeRequired)
// this.BeginInvoke(new MethodInvoker(SubFormShowDialog));
//{
Form sf = new Form();
sf.ShowDialog();
//}
}

这样就是一个了。
苍穹无痕 2010-08-23
  • 打赏
  • 举报
回复
应该是你多线程没处理好,有些线程被阻塞了
yxy10072510329 2010-08-23
  • 打赏
  • 举报
回复
谢谢你们的回答,物品已经修改成用两个线程操作了,一个线程读文件并统计,另一个线程显示进度,结贴给分,谢谢大家!
兔子-顾问 2010-08-23
  • 打赏
  • 举报
回复
这样写会好一点。
private  void calcu()
{
StatusForm form = null;
new Thread((ThreadStart)delegate
{
form = new StatusForm();
Application.Run(form);
}).Start();
while(form == null);//等待线程启动成功,窗体创建好,避免后续操作太快,窗体没创建立刻要释放的情况。
where(bool)
{
//。。。。这里是读取一个文件夹所有文件的代码,并记录当前读了多少个文件到全局静态变量,供多进程的winform使用。。。
}
form.Invoke((EventHandler)delegate{form.Close();});
}

110,566

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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