teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

追記

2019/07/12 01:03

投稿

YAmaGNZ
YAmaGNZ

スコア10674

answer CHANGED
@@ -31,4 +31,28 @@
31
31
  }
32
32
  }
33
33
  ```
34
- 一応、もとのソースが、タスク実行中でもキューだけは積むような形になっていたのでそのままにしていますが、キューに積むのも行わないのであれば、ボタンを押せないようにすればいいだけだと思います。
34
+ 一応、もとのソースが、タスク実行中でもキューだけは積むような形になっていたのでそのままにしていますが、キューに積むのも行わないのであれば、ボタンを押せないようにすればいいだけだと思います。
35
+
36
+
37
+ ### 追記
38
+ 質問の最後にあることですが
39
+ ```C#
40
+ Console.WriteLine("SleepStart");
41
+ System.Threading.Thread.Sleep(500);
42
+ button1.PerformClick();
43
+ System.Threading.Thread.Sleep(500);
44
+ Console.WriteLine("SleepEnd");
45
+
46
+ Console.WriteLine("SleepStart");
47
+ System.Threading.Thread.Sleep(500);
48
+ this.BeginInvoke((Action)(() => button1.PerformClick()));
49
+ System.Threading.Thread.Sleep(500);
50
+ Console.WriteLine("SleepEnd");
51
+
52
+ private void button1_Click(object sender, EventArgs e)
53
+ {
54
+ Console.WriteLine("Click!!!");
55
+ }
56
+
57
+ ```
58
+ こちらを試してみてください。

1

ソース修正

2019/07/12 01:03

投稿

YAmaGNZ
YAmaGNZ

スコア10674

answer CHANGED
@@ -1,6 +1,7 @@
1
1
  処理実行中にもう一度行わないのなら、button12_Click内にて下記みたいな感じで判断して実行しないのはダメなんですか?
2
2
 
3
3
  ```C#
4
+ private Task t2,t3;
4
5
  private void button12_Click()
5
6
  {
6
7
  string[] txt2 = { "ほげほげ", "にゃーにゃー" }; //どこかから複数データ拾ってくる
@@ -9,12 +10,10 @@
9
10
  q2.Enqueue(s); //キューに入れる
10
11
  }
11
12
 
12
- if (reentryflg2 == false)
13
+ if (t2 == null || t2.IsCompleted)
13
14
  {
14
- reentryflg2 = true;
15
- Task t2 = Task.Run(() => {
15
+ t2 = Task.Run(() => {
16
16
  //タイマー内で行っている処理
17
- reentryflg2 = false;
18
17
  });
19
18
  }
20
19
 
@@ -24,12 +23,10 @@
24
23
  q3.Enqueue(s);
25
24
  }
26
25
 
27
- if (reentryflg3 == false)
26
+ if (t3 == null || t3.IsCompleted)
28
27
  {
29
- reentryflg3 = true;
30
- Task t3 = Task.Run(() => {
28
+ t3 = Task.Run(() => {
31
29
  //タイマー内で行っている処理
32
- reentryflg3 = false;
33
30
  });
34
31
  }
35
32
  }