3

渡されたパラメーターとして SelectionRange S を使用して buildRangedJobCache を呼び出そうとしていますが、コンパイラー (visual studio 2010) でエラーが発生します:Method Name Expected以下は、問題を引き起こす呼び出しです:

    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 as this solution did not work for me.

**更新:どうやら明確ではありません。配置の解決策:

Thread buildIndexThread = new Thread(new ThreadStart(buildRangedJobCache));

同じ問題を行います。

4

2 に答える 2

1

デリゲートの作成時にメソッド名のみを渡します。

Thread buildIndexThread = new Thread(new ThreadStart(buildRangedJobCache));

また、ThreadStartデリゲートは引数を受け取るべきではありません。次のように定義されます。

 public delegate void ThreadStart();

したがって、メソッドの署名はデリゲートの署名buildRangedJobCacheと一致しません。ThreadStartいくつかのパラメーターをスレッドに渡したい場合は、 type のパラメーターを受け入れるParameterizedThreadStartobjectデリゲートを使用する必要があります。

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
}
于 2013-06-19T15:40:42.230 に答える