処理のキュー(Delegateでもいれとくとか)みたいなものを作って、その特定スレッドとやらで監視するしかないんじゃないですかね。
InvokeはWindowメッセージ(PostMessage)を利用することでUIスレッドで動作させていますので、フォームを持たないスレッドでは、自前で仕組みを構築する必要があります。
雰囲気を掴む程度の適当なサンプルを追記します。
C#
1using System;
2using System.Threading.Tasks;
3using System.Collections.Concurrent;
4using System.Threading;
5
6namespace Test
7{
8 class Program
9 {
10 static ConcurrentQueue<Action> _JobQueue = new ConcurrentQueue<Action>();
11 static Task _HogeTask;
12 static int _JobStartCount = 0;
13
14 static void Main(string[] args)
15 {
16 Console.WriteLine($"ManagedThreadId:{Thread.CurrentThread.ManagedThreadId} プログラムを開始しました。");
17 _HogeTask = Task.Run(() => {
18 Console.WriteLine($"ManagedThreadId:{Thread.CurrentThread.ManagedThreadId} Taskを開始しました。");
19 while (_JobStartCount<10 )
20 {
21 Action act;
22 if (_JobQueue.TryDequeue(out act))
23 {
24 _JobStartCount++;
25 act();
26 }
27
28 Thread.Sleep(1000);
29 }
30
31 Console.WriteLine($"ManagedThreadId:{Thread.CurrentThread.ManagedThreadId} {_JobStartCount}回仕事したのでもう帰ります");
32 });
33
34 while( !_HogeTask.IsCompleted )
35 {
36 //キーを押すとTaskに仕事をさせるぞ!
37 Console.ReadKey();
38
39 _JobQueue.Enqueue(() => Console.WriteLine($"ManagedThreadId:{Thread.CurrentThread.ManagedThreadId} {_JobStartCount}回仕事をしました"));
40 }
41 }
42 }
43}
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/04/09 09:28
2021/04/09 09:48 編集
2021/04/09 09:53 編集
2021/04/09 10:01
2021/04/09 10:09
2021/04/09 10:29 編集
2021/04/09 10:33
退会済みユーザー
2021/04/09 10:45
退会済みユーザー
2021/04/09 10:53
2021/04/09 11:23 編集
2021/04/09 11:19 編集
2021/04/09 12:17