wpf,怎么判断某个类型的子窗体是否全部都关闭了?

weixin_38049770 2017-03-22 06:53:26
问这个问题的原因是有这样的一个可能,就是用户可能会在一段时间内重复做出包含"向数据库添加数据的"操作。这个行为就是类似{用户复制大文件到另一个文件夹中,开启复制窗口,复制过程还没完,用户又开启新的复制任务,开启新的复制窗口等},类似这样的
例如不停点击某个按钮,该按钮的事件就是“向某个数据库添加数据,点击后会以调用show方法弹出一个等待窗口,并把添加的数据传送到这个子窗口中,在这个窗口对象中向数据库添加数据,完成后调用close关闭等待窗口”的这个过程,
有时候数据量很大,可能会长时间等待,这个时候用户可以在点击按钮,添加另一段数据到数据库,然后又会开启另一个等待窗口,并……等。假设这样的窗口开启了很多,我担心用户可能会手贱,点击了主窗口的关闭按钮会发生不可预知的事情,那么就得判断这个类型的子窗口是否全部都处于关闭状态了,如果都关闭了,才能关闭主窗口。或者有更好的解决办法?

public static List<WaitWindowEntry> waitWindowList = new List<WaitWindowEntry>(); public MainWindow() { InitializeComponent(); isCloseAllWindows(); } private void isCloseAllWindows() { new Thread(()=> { while (true) { for (int i = 0; i < waitWindowList.Count();) { if (waitWindowList[i].isClose == true) { waitWindowList.RemoveAt(i); } else { i++; } } } }); } int i = 1; private void button_Click(object sender, RoutedEventArgs e) { WaitWindowEntry a1 = new WaitWindowEntry(); a1.windowEntry = new WaitWindow(i); a1.Id = i; a1.isClose = false; a1.windowEntry.ShowInTaskbar = false; a1.windowEntry.Show(); waitWindowList.Add(a1); i++; } private void button1_Click(object sender, RoutedEventArgs e) { MessageBox.Show("还有"+waitWindowList.Count+"个"); }

public class WaitWindowEntry { public WaitWindow windowEntry { set; get; } public int Id { set; get; } public bool isClose { set; get; } }
public WaitWindow(int k) { InitializeComponent(); textBlock.Text = "任务" + k + "进行中,请耐心等待"; Task.Run(() => { for (int i = 0; i < 5; i++) { Thread.Sleep(1000); //模拟数据库添加操作 } System.Windows.Application.Current.Dispatcher.Invoke(new Action(() => { foreach(var i in MainWindow.waitWindowList) { if (i.Id == k) { i.isClose = true; this.Close(); } } })); }); } }


我试过以上方法,用集合存窗口,并标记,然后发现似乎有问题,count属性不会减少,只会增加
怎么判断WaitWindow类型的窗口全部都处于关闭状态了?或者判断全部的子窗体是否都处于关闭状态?或者有更好的方法处理这个问题?







...全文
13 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复

476

社区成员

发帖
与我相关
我的任务
社区描述
其他技术讨论专区
其他 技术论坛(原bbs)
社区管理员
  • 其他技术讨论专区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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