c# - 新线程导致 "Method Name Expected"错误

标签 c# .net multithreading

我正在尝试使用 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/

相关文章:

c# - 重新绑定(bind)新数据源时 DataGrid 不更新

c# - EF Core 使用 NUGET 包管理器控制台或 CMD

c# - 在 ADO.NET 中处理 "using"语句

c# - 多线程中的数学类给出错误

python - 使用 ThreadingMixin 停止由 BaseHTTPServer 生成的线程

c# - 需要在 .NET 中使用反射调用 COM 组件

c# - CentOS 服务器上的 ASP .NET 核心控制台应用程序丢弃请求

c# - 完全无法定义System.Runtime.Caching的UpdateCallback

c# - System.ArgumentException : Incorrect number of parameters supplied for lambda declaration in System. Linq.Expressions 方法

c# - 具有两个索引的循环缓冲区