多线程委托问题,预期方法名称?

时间:2012-07-06 08:56:09

标签: c# winforms multithreading delegates threadpool

是的,这是我第一次尝试使用多线程,所以可能会非常简单,我很遗憾但是这里... ...

我正在使用线程池同时启动一堆短时间运行的进程,每个进程都会传递一个URL来处理/抓取fb-tweets-google-plusones并将结果返回给我{{1通过调用委托ReportProgress的方法,但是当线程完成处理后传入处理过的对象时,我不断收到错误ThreadDone,但我传入方法Method name expected?我愿意打赌(希望)这是一个非常简单的事情,更有经验的人可以马上发现。以下是我到目前为止的情况:

代表定义:

ReportProgress

DoWork的:

public delegate void ThreadDone(object sender, ScrapeResult scrapedResult);

ReportProgress:

public void DoWork(object sender)
{
      while (true)
      {
          //lock the thread to prevent other threads from processing same job
          lock (_threadLock)
          {   
              string url = (string)sender;
              result.URL = url;

              if (chkFb.Checked)
              {
                  result.Shares = grabber.GetFacebookShares(url);
              }
              if (chkTwitt.Checked)
              {
                  result.Tweets = grabber.GetTweetCount(url);
              }
              if (chkPlusOne.Checked)
              {
                  result.PlusOnes = grabber.GetPlusOnes(url);
              }

              this.Invoke(new ThreadDone(ReportProgress(sender, result))); //ERROR is on this line
           }
           Thread.Sleep(100);
        }
}

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:3)

改变这个:

this.Invoke(new ThreadDone(ReportProgress(sender, result)));

要:

this.Invoke(new ThreadDone(ReportProgress), sender, result);

Invoke()的第一个参数是委托,构建一个委托,你不需要给它的参数,只需要调用的方法(这就是编译器说“期望的方法名称”的原因){{1}你创建新的委托,并使用new ThreadDone(ReportProgress)的第二和第三个参数指定将传递给你的委托的参数。

答案 1 :(得分:2)

我会认真考虑使用TPL。处理任务完成时更清洁。