回答編集履歴

2

.NET6 用にソースを修正

2022/10/26 10:23

投稿

KOZ6.0
KOZ6.0

スコア2626

test CHANGED
@@ -25,14 +25,14 @@
25
25
  timer1.Start();
26
26
  }
27
27
 
28
+ private void Timer1_Tick(object? sender, EventArgs e) {
29
+ Invalidate();
30
+ }
31
+
28
32
  protected override void OnFormClosed(FormClosedEventArgs e) {
29
33
  base.OnFormClosed(e);
30
34
  timer1.Stop();
31
35
  timer1.Dispose();
32
- }
33
-
34
- private void Timer1_Tick(object sender, EventArgs e) {
35
- Invalidate();
36
36
  }
37
37
 
38
38
  protected override void OnPaint(PaintEventArgs e) {
@@ -68,18 +68,23 @@
68
68
  }
69
69
 
70
70
  [DllImport("user32.dll", SetLastError = true)]
71
- static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);
71
+ private static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);
72
72
 
73
- private void TimerTHread(object args) {
73
+ private void TimerTHread(object? args) {
74
- IntPtr mainFormHandle = (IntPtr)args;
74
+ IntPtr mainFormHandle = (args is IntPtr) ? (IntPtr)args : IntPtr.Zero;
75
- var timerForm = new TimerForm();
75
+ var timerForm = new TimerForm {
76
- timerForm.Location = new Point(0, 0);
76
+ Location = new Point(0, 0),
77
- timerForm.Size = new Size(200, 100);
77
+ Size = new Size(200, 100)
78
+ };
78
79
  SetParent(timerForm.Handle, mainFormHandle);
79
80
  Application.Run(timerForm);
81
+ }
82
+
83
+ private void button1_Click(object sender, EventArgs e) {
84
+ // 重い処理
85
+ Thread.Sleep(10000);
80
86
  }
81
87
  }
82
88
  ```
83
89
 
84
- ~~こうしてできたウインドウはタイトルバーをドラッグしていてもタイマーが更新されます。~~
85
90
  こうしてできたウインドウはメインウインドウで重い処理を実行しても時刻は更新されます。

1

コメント訂正

2022/10/26 06:07

投稿

KOZ6.0
KOZ6.0

スコア2626

test CHANGED
@@ -73,7 +73,6 @@
73
73
  private void TimerTHread(object args) {
74
74
  IntPtr mainFormHandle = (IntPtr)args;
75
75
  var timerForm = new TimerForm();
76
- timerForm.TopLevel = false;
77
76
  timerForm.Location = new Point(0, 0);
78
77
  timerForm.Size = new Size(200, 100);
79
78
  SetParent(timerForm.Handle, mainFormHandle);
@@ -82,5 +81,5 @@
82
81
  }
83
82
  ```
84
83
 
85
- こうしてできたウインドウはタイトルバーをドラッグしていてもタイマーが更新されます。
84
+ ~~こうしてできたウインドウはタイトルバーをドラッグしていてもタイマーが更新されます。~~
86
-
85
+ こうしてできたウインドウはメインウインドウで重い処理を実行しても時刻は更新されます。