かなり新しい言語であるC#で取り組んでいる大規模なプロジェクトがあります。プロジェクトはGUIに大きく依存しており、表示されるデータはたくさんあります。最近、これまでにない場所でクロススレッドエラーが発生しています。それらが発生したこれらのエラーは簡単に解決されました:
if (logListView.InvokeRequired)
{
logListView.BeginInvoke(new MethodInvoker(
() => logListView.Items[logListView.Items.Count - 1].EnsureVisible()));
}
else
{
logListView.Items[logListView.Items.Count - 1].EnsureVisible();
}
ただし、私の質問は次のとおりです。Windowsフォームオブジェクトにアクセスするたびに、そのメソッドを適用する必要がありますか?特別な場合はありますか?私はマルチスレッドを使用していないので、私の知る限り、これらのエラーが発生する場所は私の制御不能です。たとえば、どのコードがどのスレッドで実行されるかを制御することはできません。C#は、それをすべて独自に実行しています(言語についてはよくわかりません)。GUIを変更する各行にifステートメントを実装することは、非常に不快に思えます。