2012-04-06 47 views
0

着有“经典”的方法实现,我通常是这样执行的BeginInvoke: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 
} 

回答

1

你要投thisIFace第一:

var iface = (IFace)this; 
BeginInvoke(new FooDelegate(iface.Foo)); 
+0

它的工作原理,非常感谢你! – Cristiano 2012-04-06 07:34:12

0

因为你的实现是explicit,方法FOO无法通过访问类实例。只能通过接口实例。这意味着您需要将您的实例this转换为IFace实例。那么你可以通过该方法BeginInvoke

var asIFace = (IFace)this; 
BeginInvoke(asIFace.Foo));