UIコントロールを管理するためだけに60個のスレッドを実装する必要がある場合は前述のように、デザインに何か問題がある可能性が非常に高いです。
しかし、スレッド数を決定するときは、競合やロック機構などの要素を考慮する必要があります。たとえば、すべてのスレッドが多くの読み取り値を持つ共有データを使用している場合は、アクセスを管理するためにReaderWriterLockSlimを使用することを検討する必要があります(いずれの状況でも、重量型のReaderWriterLockクラスは使用しないでください)。代わりに、セマフォーやノンブロッキング同期化方法に応じて、ここでは役に立つかもしれません。 WPFでは
あなたがバックグラウンドスレッドからUIコントロールにアクセスするためにアクセスする必要がある場合、以下のように、あなたがディスパッチャを使用することができますが:
private void AddTbToStackPanel(string text)
{
Dispatcher.BeginInvoke(DispatcherPriority.Normal, (Action)(() =>
{
StackPanel stackPanel = stackPanel1 as StackPanel;
TextBlock tb = new TextBlock();
tb.Text = text;
stackPanel.Children.Add(tb);
}));
}
これらは、コントロールのどのような種類がありますか? WPF? WinForms?コントロールを作成したスレッド(通常は単一のGUIスレッド)にアクセスできるので、コントロールごとのスレッドを持つことはあまり役に立たないでしょう。どのような問題を解決しようとしていますか? – dlev
これがwinforms(またはWPFだと思います)の場合、コントロールのプロパティを変更することは、それらを作成したスレッドで行う必要があります。また、60スレッドは非常に効率が悪いようです。 –