ISynchronizeInvoke
通常、すべての UI 操作を同じスレッドで実行する必要があるクライアント アプリで、「正しい」スレッドに戻るために使用されます。これは通常、メッセージ ポンプ/イベント ループを介して行われます。これは通常、コンソール アプリには存在しませんか?
コンソール アプリでのスレッド要件は何ですか? 何も持っていない場合は、おそらくISynchronizeInvoke
常にetcfalse
から返される独自のノーオペレーション実装を作成できます。これInvokeRequired
は、実装の最初の試みです-テストされていません。念のため...
public class NoOpSynchronizeInvoke : ISynchronizeInvoke
{
private delegate object GeneralDelegate(Delegate method,
object[] args);
public bool InvokeRequired { get { return false; } }
public Object Invoke(Delegate method, object[] args)
{
return method.DynamicInvoke(args);
}
public IAsyncResult BeginInvoke(Delegate method,
object[] args)
{
GeneralDelegate x = Invoke;
return x.BeginInvoke(method, args, null, x);
}
public object EndInvoke(IAsyncResult result)
{
GeneralDelegate x = (GeneralDelegate) result.AsyncState;
return x.EndInvoke(result);
}
}