私のアプリケーションには、すべてのデータベースアクションを担当するクラスがあります。これはメインクラスから呼び出され、アクションの完了後にデリゲートを使用してメソッドを呼び出します。非同期であるため、GUIでinvokeを使用する必要があるため、単純な拡張メソッドを作成しました。
public static void InvokeIfRequired<T>(this T c, Action<T> action)
where T: Control
{
if (c.InvokeRequired)
{
c.Invoke(new Action(() => action(c)));
}
else
{
action(c);
}
}
これは、textBoxで呼び出そうとすると正常に機能します。
textBox1.InvokeIfRequired(c => { c.Text = "it works!"; });
しかし、ToolStripStatusLabelまたはToolStripProgressBarで呼び出そうとすると、エラーが発生します。
タイプ'System.Windows.Forms.ToolStripStatusLabel'は、ジェネリック型またはメソッド'SimpleApp.Helpers.InvokeIfRequired(T、System.Action)'のタイプパラメーター'T'として使用できません。'System.Windows.Forms.ToolStripStatusLabel'から'System.Windows.Forms.Control'への暗黙の参照変換はありません。
これはおそらく簡単な修正であることを私は知っていますが、私はそれを処理することができます:/