Skip to content

Commit b7dc1ab

Browse files
committed
Properly cancel and close all open forms when main form closes
1 parent 6dc4e42 commit b7dc1ab

File tree

2 files changed

+28
-2
lines changed

2 files changed

+28
-2
lines changed

BSA Browser/BSABrowser.cs

+18-2
Original file line numberDiff line numberDiff line change
@@ -297,10 +297,13 @@ private void ShowProgressForm_Click(object sender, EventArgs e)
297297

298298
BackgroundWorker bw = new BackgroundWorker();
299299
bw.WorkerReportsProgress = true;
300-
bw.DoWork += delegate
300+
bw.DoWork += delegate (object _, DoWorkEventArgs eventArgs)
301301
{
302302
for (int i = 0; i < 10; i++)
303303
{
304+
if (eventArgs.Cancel)
305+
break;
306+
304307
decimal percentage = (decimal)i / 10 * 100;
305308
bw.ReportProgress((int)percentage);
306309
System.Threading.Thread.Sleep(1000);
@@ -315,6 +318,12 @@ private void ShowProgressForm_Click(object sender, EventArgs e)
315318
pf.BlockClose = false;
316319
pf.Close();
317320
};
321+
322+
pf.Canceled += delegate
323+
{
324+
bw.CancelAsync();
325+
};
326+
318327
bw.RunWorkerAsync();
319328
}
320329

@@ -365,7 +374,14 @@ private void BSABrowser_Load(object sender, EventArgs e)
365374
private void BSABrowser_FormClosed(object sender, FormClosedEventArgs e)
366375
{
367376
// Signal to close all Forms when MainForm closes
368-
Application.Exit();
377+
for (int i = Application.OpenForms.Count; i-- > 0;)
378+
{
379+
Form form = Application.OpenForms[i];
380+
if (form is ProgressForm)
381+
(form as ProgressForm).ForceCancel();
382+
else
383+
form.Close();
384+
}
369385
}
370386

371387
private void BSABrowser_FormClosing(object sender, FormClosingEventArgs e)

BSA Browser/ProgressForm.cs

+10
Original file line numberDiff line numberDiff line change
@@ -124,5 +124,15 @@ private void OnCanceled(EventArgs e)
124124
{
125125
Canceled?.Invoke(this, e);
126126
}
127+
128+
/// <summary>
129+
/// Cancels and closes <see cref="ProgressForm"/>.
130+
/// </summary>
131+
public void ForceCancel()
132+
{
133+
OnCanceled(EventArgs.Empty);
134+
this.BlockClose = false;
135+
this.Close();
136+
}
127137
}
128138
}

0 commit comments

Comments
 (0)