ちょっと今スマホなのでテストする環境がないのですが加筆・修正しました。
C#
1if(b){
2 MessageBox.Show("10秒立ったので処理を終了します");
3 this.Close();
4}
を何度も書くのはいくら何でもナンセンスなので
Timerとflagと上記処理をまとめて1つのクラスにして、イベントで呼び出される各メソッドがそのインスタンスのCloseチェックメソッドを呼び出す形にすれば綺麗になると思います。
C#
1using System;
2using System.Collections.Generic;
3using System.ComponentModel;
4using System.Data;
5using System.Drawing;
6using System.Linq;
7using System.Text;
8using System.Threading.Tasks;
9using System.Windows.Forms;
10
11namespace WindowsFormsApp
12{
13 public partial class Form1 : Form
14 {
15 CloseTimer closeTimer;
16 public Form1()
17 {
18 InitializeComponent();
19
20 closeTimer = new CloseTimer(this, 10000, "10秒立ったので処理を終了します");
21 }
22
23 private void Button1_Click(object sender, EventArgs e)
24 {
25 closeTimer.Start();
26 MessageBox.Show("ボタン1");
27 }
28
29 private void Button2_Click(object sender, EventArgs e)
30 {
31 if (closeTimer.CloseIfCan())
32 return;
33 MessageBox.Show("ボタン2");
34 }
35
36 private void button3_Click(object sender, EventArgs e)
37 {
38 if (closeTimer.CloseIfCan())
39 return;
40 MessageBox.Show("ボタン3");
41 }
42 }
43
44 public class CloseTimer : IDisposable
45 {
46 bool canClose;
47 Timer timer;
48 string message;
49 Form target;
50
51 public CloseTimer(Form target, int delay, string message)
52 {
53 this.target = target;
54
55 timer = new Timer();
56 timer.Interval = delay;
57 timer.Tick += (object sender, EventArgs e) =>
58 {
59 timer.Stop();
60 canClose = true;
61 };
62
63 this.message = message;
64 }
65
66 public void Start()
67 {
68 if (canClose)
69 return;
70 timer.Start();
71 }
72
73 public bool CloseIfCan()
74 {
75 if (canClose)
76 {
77 MessageBox.Show(message);
78 target.Close();
79 return true;
80 }
81 return false;
82 }
83
84 public void Dispose()
85 {
86 timer.Dispose();
87 }
88 }
89}
これで、遅延時間を変えたときに全部のボタンクリックイベントを修正しなくてもよくなりました。
例外チェックなど細かな部分は省いているので必要に応じて修正してください。
実際に書くときは別のファイルに書いた方が良いかと思います。
今回Timerを使ってますが、周期的に動作させるわけではないのでTask.Delayでも良いかもしれませんね。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。