回答編集履歴

3

修正

2021/04/09 10:55

投稿

退会済みユーザー
test CHANGED
@@ -84,7 +84,7 @@
84
84
 
85
85
 
86
86
 
87
- _JobQueue.Enqueue(() => Console.WriteLine($"ManagedThreadId:{Thread.CurrentThread.ManagedThreadId} {_JobStartCount}回仕事をしました"));
87
+ _JobQueue.Enqueue(() => Console.WriteLine($"ManagedThreadId:{Thread.CurrentThread.ManagedThreadId} {_JobStartCount}回仕事をしました"));
88
88
 
89
89
  }
90
90
 

2

サンプル追記

2021/04/09 10:55

投稿

退会済みユーザー
test CHANGED
@@ -1,3 +1,97 @@
1
1
  処理のキュー(Delegateでもいれとくとか)みたいなものを作って、その特定スレッドとやらで監視するしかないんじゃないですかね。
2
2
 
3
3
  InvokeはWindowメッセージ(PostMessage)を利用することでUIスレッドで動作させていますので、フォームを持たないスレッドでは、自前で仕組みを構築する必要があります。
4
+
5
+
6
+
7
+ 雰囲気を掴む程度の適当なサンプルを追記します。
8
+
9
+ ```C#
10
+
11
+ using System;
12
+
13
+ using System.Threading.Tasks;
14
+
15
+ using System.Collections.Concurrent;
16
+
17
+ using System.Threading;
18
+
19
+
20
+
21
+ namespace Test
22
+
23
+ {
24
+
25
+ class Program
26
+
27
+ {
28
+
29
+ static ConcurrentQueue<Action> _JobQueue = new ConcurrentQueue<Action>();
30
+
31
+ static Task _HogeTask;
32
+
33
+ static int _JobStartCount = 0;
34
+
35
+
36
+
37
+ static void Main(string[] args)
38
+
39
+ {
40
+
41
+ Console.WriteLine($"ManagedThreadId:{Thread.CurrentThread.ManagedThreadId} プログラムを開始しました。");
42
+
43
+ _HogeTask = Task.Run(() => {
44
+
45
+ Console.WriteLine($"ManagedThreadId:{Thread.CurrentThread.ManagedThreadId} Taskを開始しました。");
46
+
47
+ while (_JobStartCount<10 )
48
+
49
+ {
50
+
51
+ Action act;
52
+
53
+ if (_JobQueue.TryDequeue(out act))
54
+
55
+ {
56
+
57
+ _JobStartCount++;
58
+
59
+ act();
60
+
61
+ }
62
+
63
+
64
+
65
+ Thread.Sleep(1000);
66
+
67
+ }
68
+
69
+
70
+
71
+ Console.WriteLine($"ManagedThreadId:{Thread.CurrentThread.ManagedThreadId} {_JobStartCount}回仕事したのでもう帰ります");
72
+
73
+ });
74
+
75
+
76
+
77
+ while( !_HogeTask.IsCompleted )
78
+
79
+ {
80
+
81
+ //キーを押すとTaskに仕事をさせるぞ!
82
+
83
+ Console.ReadKey();
84
+
85
+
86
+
87
+ _JobQueue.Enqueue(() => Console.WriteLine($"ManagedThreadId:{Thread.CurrentThread.ManagedThreadId} {_JobStartCount}回仕事中をしました"));
88
+
89
+ }
90
+
91
+ }
92
+
93
+ }
94
+
95
+ }
96
+
97
+ ```

1

修正

2021/04/09 10:54

投稿

退会済みユーザー
test CHANGED
@@ -1 +1,3 @@
1
1
  処理のキュー(Delegateでもいれとくとか)みたいなものを作って、その特定スレッドとやらで監視するしかないんじゃないですかね。
2
+
3
+ InvokeはWindowメッセージ(PostMessage)を利用することでUIスレッドで動作させていますので、フォームを持たないスレッドでは、自前で仕組みを構築する必要があります。