我有一个方法可以在Dispatcher上调用某些操作。
public static object Invoke(Dispatcher dispatcher, Action method)
{
try
{
ValidateArgs(dispatcher, method);
return dispatcher.Invoke(method);
}
catch (Exception ex)
{
//Log exception
Logger.Error(ex.Message, ex);
throw;
}
}
Dispatcher(在System.Windows.Threading中)定义了一个void Invoke方法,它接受Action参数。
public void Invoke(Action callback)
{
Invoke(callback, DispatcherPriority.Send, CancellationToken.None, TimeSpan.FromMilliseconds(-1));
}
现在我在本地编译的代码片段会在构建服务器(TeamCity 5)上引发异常并显示错误消息 - 无法将类型'void'隐式转换为'object'
这让我想知道为什么它在我的本地机器上编译,但是在Build Agent上没有这样做。当我将鼠标悬停在Invoke方法上时,intellisense显示它将调用具有返回参数的Invoke方法,并采用2个参数 - Delegate和object []。
因此,我提出了几个我无法弄清楚的问题
如果您需要其他信息,请与我们联系。
答案 0 :(得分:1)
在构建服务器上进行编译时,您的代码正在调用重载void Dispatcher.Invoke(Action)
,它不会返回值,因此return
语句无法编译(没有任何内容可以返回)。
该方法仅从.NET 4.5开始提供,而早期版本an overload与您调用它的方式兼容,是IntelliSense屏幕截图中显示的方法。
简而言之,问题是您自己的系统和构建服务器编译针对不同版本的.NET。 4.5中添加的重载是根据重载决策规则更好地匹配呼叫站点但不幸的是它将呼叫站点变为无效语句。