2

次のメソッドを考えると:

public static void ExecuteAsync( this EventHandler eH, object sender, EventArgs eA ) {
    eH.GetInvocationList( ).Cast<EventHandler>( ).ToList( ).ForEach( e => {         
        e.BeginInvoke( sender, eA, IAR =>
            ( ( IAR as AsyncResult ).AsyncDelegate as EventHandler ).EndInvoke( IAR ), null );
    } );
}

eプロパティ Target があることに気付きました。

さらに調べてみると、または かどうe.Target is System.Windows.Controls.Controlかを確認できることがわかりe.Target is System.Windows.Forms.Controlました。

この拡張機能を使用する場合、便宜上 (そして私は怠け者です)、デリゲート ターゲットがデリゲートを呼び出す必要があるかどうかを判断できるようにしたいので、これは素晴らしいことです (WinForms の場合: Control.Invoke( foo ); WPFの場合:) Control.Dispatcher.Invoke( foo )

オブジェクトを実際の型にキャストする方法を知る必要はありません (それがなくても生きられます)。InvokeRequiredプロパティとInvokeメソッドにアクセスできるようにオブジェクトをキャストする方法を知る必要があるだけです ( WinForms コントロールの場合)、またはDispatcherプロパティ (Dispatcher.CheckAccess( )関数とDispatcher.Invoke( )メソッドへのアクセス用)。

これは可能ですか?どうすればこれを行うことができますか?(e.Target をキャストしようとしましたSystem.Windows.Control.Controlが、結果にはプロパティがありませんDispatcher)。

編集

キャストコード(およびインポート/参照)のリクエストに従って:

それが WPF コントロールかどうかを判断するには:

( if e.Target is System.Windows.Controls.Control ){ //Fully Qualified
    ( e.Target as System.Windows.Controls.Control)./*...*/;
}

WinForms コントロールかどうかを判断するには:

( if e.Target is System.Windows.Forms.Control ){ //Fully Qualified
    ( e.Target as System.Windows.Forms.Control )./*...*/;
}

プロジェクトはいくつかのライブラリを参照しています:

Microsoft.CSharp
MySql.Data
PresentationFramework
System
System.Configuration
System.Configuration.Install
System.Core
System.Data
System.Data.DataSetExtensions
System.Drawing
System.Management
System.Windows.Forms
System.Xml
System.Xml.Linq
4

1 に答える 1