我正在尝试使用 SelectionRange S 作为传入参数调用 buildRangedJobCache,但编译器(visual studio 2010)给出了错误:预期的方法名称
下面是给出问题的调用:
private void retrieveSeveralDaysJobs(SelectionRange S)
{
ignoreUpdates = false;
this.SetStatus(DataLogUIStrings.strRetrievingJobInformation);
Thread buildIndexThread = new Thread(new ThreadStart(buildRangedJobCache(S)));
buildIndexThread.Priority = ThreadPriority.Lowest;
buildIndexThread.Start();
}
这里是函数 buildRangedJobCache(SelectionRange S):
private void buildRangedJobCache(SelectionRange S)
{
this.Cursor = Cursors.AppStarting;
try
{
if (DataStore == null)
{ throw new Exception("Error: DataStore is null, Unable to retrieve jobs."); }
lock (((ICollection)jobs).SyncRoot)
{
for (DateTime Day = S.Start; Day <= S.End; Day.AddDays(1))
{
this.RangeJobs.AddRange(DataStore.GetJobsListForDay(JobDateToDisplay.GetValueOrDefault(DateTime.Today)));
}
}
this.SetStatus(string.Format(DataLogUIStrings.strRetrievedSummaryInformation, this.jobs.Count));
}
catch (Exception e)
{
Log.Write(e);
}
this.Cursor = Cursors.Default;
}
我也链接到这里:Delegate: Method name expected error 因为这个解决方案对我不起作用。
**update: 貌似没搞清楚,解决方案放上:
Thread buildIndexThread = new Thread(new ThreadStart(buildRangedJobCache));
做同样的事情。
最佳答案
创建委托(delegate)时只传递方法名:
Thread buildIndexThread = new Thread(new ThreadStart(buildRangedJobCache));
还有 ThreadStart委托(delegate)不应接收任何参数。它被定义为
public delegate void ThreadStart();
因此,您的 buildRangedJobCache
方法签名与 ThreadStart
委托(delegate)签名不匹配。如果你想传递一些参数给线程,你应该使用ParameterizedThreadStart委托(delegate),它接受 object
类型的参数:
private void retrieveSeveralDaysJobs(SelectionRange range)
{
ignoreUpdates = false;
this.SetStatus(DataLogUIStrings.strRetrievingJobInformation);
// pass ParameterizedThreadStart delegate
Thread buildIndexThread = new Thread(BuildRangedJobCache);
buildIndexThread.Priority = ThreadPriority.Lowest;
buildIndexThread.Start(range); // provide parameter for thread
}
private void BuildRangedJobCache(Object obj)
{
SelectionRange range = (SelectionRange)obj; // cast to your type
// code
}
关于c# - 新线程导致 "Method Name Expected"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17195341/