WinForms アプリケーションで設定ThreadPool.SetMaxThreadsした場合、この設定は作業項目のみに適用されますか、それともタイマーや GUI 更新などのアセンブリ スレッド全体に適用されますか?
私は、通常はそれぞれ約 1 分の半短時間の操作を継続的に処理するアプリケーションを構築しています。私は最初に、正常に動作する手動スレッド作成バージョンを思いつきました。操作ごとに新しいスレッドを作成しているので、より高速で効率的なバージョンを作成できるかどうかを調べています。ThreadPool を試してみましたが、うまく機能せず、タイマーと GUI の更新もブロックされました。これは正常ですか、それとも間違った使い方をしていますか?
ここに私の疑似コードがあります:
手動スレッド バージョン: (すべてMaxThreadのThreadCount読み取りと書き込みはロックで行われます)
timer1.Tick += Tick();
private void Tick()
{
    //do some text logging
    //do some TextBox updating
}
int MaxThreads = 10
while(true)
{
    if(ThreadCount < MaxThreads)
    {
        new Thread(() => Process()).Start();
        ThreadCount++;
    }
    else
    {
        Thread.Sleep(10000);
    }
}
private void Process()
{
    //do something
    ThreadCount--;
}
ThreadPool バージョン: (コンピューターは 32 ビット Windows サーバー OS のデュアルコア Xeon)
timer1.Tick += Tick();
private void Tick()
{
    //do some text logging
    //do some TextBox updating
}
ThreadPool.SetMaxThreads(10,10) **<--removing this didn't help with freezing at all**
while(true)
{
    if(ThreadPool.GetAvailableThreads() > 0)
    {
        ThreadPool.QueueWorkItem(Process, null)
    }
    else
    {
        Thread.Sleep(10000);
    }
}
private void Process()
{
    //do something
}