我試圖執行錯誤處理我的計劃之內的組件類,但不斷收到以下錯誤消息:的方法類型參數不能從輔助型的使用推斷
錯誤1個類型參數的方法 'Marketplace.ErrorHandlingComponent.Invoke(System.Func,int, System.TimeSpan)'不能從使用情況中推斷出來。嘗試明確指定類型參數 。
我不知道什麼是嘗試指定類型參數明確意思。
MainWindow.xaml.cs
public void SetPlotList(int filterReference)
{
// Fill plot list view
List<PlotComponent.PlotList> plotList = PlotComponent.SelectPlotLists(filterReference);
// Find the plot list item in the new list
PlotComponent.PlotList selectPlotList =
plotList.Find(x => Convert.ToInt32(x.PlotId) == _focusPlotReference);
Dispatcher.Invoke(
(() =>
{
PlotListView.ItemsSource = plotList;
if (selectPlotList != null)
{
PlotListView.SelectedItem = selectPlotList;
}
}));
int jobSum = 0;
int bidSum = 0;
foreach (PlotComponent.PlotList item in PlotListView.Items)
{
jobSum += Convert.ToInt32(item.Jobs);
bidSum += Convert.ToInt32(item.Bids);
}
// Determine job/bid list ratio
Dispatcher.BeginInvoke(
new ThreadStart(() => JobBidRatioTextBlock.Text = jobSum + " jobs - " + bidSum + " bids"));
}
private void ValidateTextbox()
{
if (Regex.IsMatch(FilterTextBox.Text, "[^0-9]") || FilterTextBox.Text == "") return;
try
{
ErrorHandlingComponent.Invoke(() => SetPlotList(Convert.ToInt32(FilterTextBox.Text)), 3, TimeSpan.FromSeconds(1));
}
catch
{
FilterTextBox.Text = null;
}
}
ErrorHandlingComponent.cs
public static T Invoke<T>(Func<T> func, int tryCount, TimeSpan tryInterval)
{
if (tryCount < 1)
{
throw new ArgumentOutOfRangeException("tryCount");
}
while (true)
{
try
{
return func();
}
catch (Exception ex)
{
if (--tryCount > 0)
{
Thread.Sleep(tryInterval);
continue;
}
LogError(ex.ToString());
throw;
}
}
}
如何調整'Invoke'調用來迎合返回void和non-void類型的方法? – methuselah 2015-02-05 16:48:53
@methuselah它需要接受一個不返回值的委託。如果它也不需要接受任何參數,那麼可以使用「Action」。當然,如果考慮到委託人沒有回報價值的事實,該方法的實施將需要顯着改變。如果你想能夠同時擁有,你可以編寫第二個非泛型重載。 – Servy 2015-02-05 16:50:15