1

わかりましたので、プロジェクトでこのコード行を使用しています

System.Threading.ThreadPool.QueueUserWorkItem(new System.Threading.WaitCallback(ProcessReport));

しかし、それは次のエラーをスローしています

「ProcessReport」のオーバーロードは、デリゲート「System.Threading.WaitCallback」と一致しません

上記の行を次の行に置き換えます。

Thread t = new Thread(new ThreadStart(ProcessReport));
t.Start();

これでエラーは解消されましたが、これは正しい方法です。私は会社のインターンであり、これは大きなプロジェクト全体の一部であるため、その場で出力を確認することはできません。助けてください。

許可されていないため、ProcessReport全体を投稿することはできませんが、これで始まります:

public void ProcessReport()

4

2 に答える 2

6

私の仮定は、これがコンパイルされるので:

new ThreadStart(ProcessReport)

メソッドProcessReportは次のようになります。

void ProcessReport()
{
}

QueueUserWorkItemデリゲートを受け取りWaitCallbackます。これには、パラメーターとして単一のオブジェクトを渡す必要があります。したがって、メソッドのシグネチャを次のように変更します。

void ProcessReport(object state)
{
}

そして、あなたは大丈夫なはずです。state使用する必要がない場合は無視できるパラメータですが、その値は の 2 番目のパラメータとして渡すものですQueueUserWorkItem。にオブジェクトを渡さないオーバーロードを使用しているため、QueueUserWorkItem常に null になります。

于 2012-07-10T17:47:52.790 に答える
0

で発生する可能性のある問題の 1 つ

Thread t = new Thread(new ThreadStart(ProcessReport));

t.Start();

条件をチェックせずにそのように非常に多くのスレッドを開始すると、プログラムがクラッシュしたり、場合によってはシステムがクラッシュしたりする可能性があります。ただし、このスレッドが開始される前にイベントが発生する必要があるアプリの場合、コードは問題ありません。

于 2012-07-10T17:53:04.717 に答える