2011-08-31 66 views
1

我正在编写一个C#.NET 3.0异步调用WCF服务。我得到以下错误。在C#3.0中的操作

错误1使用泛型类型'System.Action'需要'1'类型 参数。

但是,当在.NET 3.5中这样做时,不会发生错误。 .NET 3.0不支持这个,或者我做错了。我必须使用.NET 3.0,因为iam正在为XPe编写应用程序。

这就是我的代码的样子。

AsyncCallback aSyncCallBack = 
delegate(IAsyncResult result) 
{ 
    try 
    { 
     service.EndSubscribe(result); 

     this.Dispatcher.BeginInvoke((Action)delegate 
     { DGStudent.ItemsSource = test; }); 
    } 
    catch (Exception ex) 
    { 
     this.Dispatcher.BeginInvoke((Action)delegate 
     { MessageBox.Show(ex.Message); }); 
    } 
}; 
+2

如果你拿走'(Action)',它会起作用吗?因为投射可能是无用的......而且为了您的信息,您可以在XPe上使用.NET 4.0:http://stackoverflow.com/questions/4374357/can-i-install-net-framework-4-on -windows-xp-embedded – xanatos

+0

你确定.net 4.0正在为嵌入式XP工作。因为我已经尝试在XP嵌入式上安装.net 3.5并且它不支持它。但我会研究更多。谢谢你的提示。 – Tan

+0

还是您的意思是Windows Embedded Standard 2009? – Tan

回答

3

非通用System.Action是在.NET 3.5中引入的,无法从.NET 3.0中使用。编译器认为你的意思是通用的System.Action<T>,它需要一个类型参数。

+0

是的,点击第一个链接并记下侧栏。 –

+0

点击链接并选中“其他版本” –

2

所有Action代表除了Action<T>只加入在.NET 3.5;它们在3.0中不可用。如果你看看文档,Action documentation只有3.5和4.0的版本,而Action<T> documentation可以回到2.0。

您必须创建您自己的无参数代表版本,或者在winforms中使用类似MethodInvoker之类的东西。