wpf,怎么判断某个类型的子窗体是否全部都关闭了?
问这个问题的原因是有这样的一个可能,就是用户可能会在一段时间内重复做出包含"向数据库添加数据的"操作。这个行为就是类似{用户复制大文件到另一个文件夹中,开启复制窗口,复制过程还没完,用户又开启新的复制任务,开启新的复制窗口等},类似这样的
例如不停点击某个按钮,该按钮的事件就是“向某个数据库添加数据,点击后会以调用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类型的窗口全部都处于关闭状态了?或者判断全部的子窗体是否都处于关闭状态?或者有更好的方法处理这个问题?