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
}