0

「クラシック」メソッドの実装では、通常、次のように BeginInvoke を実行します。

private delegate void FooDelegate();
public void Foo()
{
  if(InvokeRequired)
  {
    BeginInvoke(new FooDelegate(Foo));
    return;
  }

  // Do what you want here
}

メソッドが明示的なインターフェイス メンバー宣言の場合、同じことを行うにはどうすればよいですか? お気に入り:

public void IFace.Foo()
{
  // Need to BeginInvoke here
}

これは動作しません:

private delegate void FooDelegate();
public void IFace.Foo()
{
  if(InvokeRequired)
  {
    BeginInvoke(new FooDelegate(IFace.Foo));
    return;
  }

  // Do what you want here
}
4

2 に答える 2

1

最初にキャストthisする必要があります:IFace

var iface = (IFace)this;
BeginInvoke(new FooDelegate(iface.Foo));
于 2012-04-06T07:28:55.990 に答える
0

実装が明示的であるため、クラス インスタンスを介してメソッド Foo にアクセスすることはできません。インターフェイス インスタンス経由のみ。thisこれは、インスタンスをインスタンスにキャストする必要があることを意味しIFaceます。次に、そのメソッドをに渡すことができますBeginInvoke:

var asIFace = (IFace)this;
BeginInvoke(asIFace.Foo));
于 2012-04-06T07:41:39.010 に答える