7

私のアプリケーションには、すべてのデータベースアクションを担当するクラスがあります。これはメインクラスから呼び出され、アクションの完了後にデリゲートを使用してメソッドを呼び出します。非同期であるため、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'への暗黙の参照変換はありません。

これはおそらく簡単な修正であることを私は知っていますが、私はそれを処理することができます:/

4

3 に答える 3

9

これは、ToolStripItem (エラーの原因となっている 2 つのベース) がコンポーネントであり、コントロールではないためです。それらを所有するツール ストリップで拡張メソッドを呼び出して、デリゲート メソッドを調整してみてください。

于 2012-09-14T06:49:46.303 に答える