是的,这是我第一次尝试使用多线程,所以可能会非常简单,我很遗憾但是这里... ...
我正在使用线程池同时启动一堆短时间运行的进程,每个进程都会传递一个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);
}
}
非常感谢任何帮助!
答案 0 :(得分:3)
改变这个:
this.Invoke(new ThreadDone(ReportProgress(sender, result)));
要:
this.Invoke(new ThreadDone(ReportProgress), sender, result);
Invoke()
的第一个参数是委托,构建一个委托,你不需要给它的参数,只需要调用的方法(这就是编译器说“期望的方法名称”的原因){{1}你创建新的委托,并使用new ThreadDone(ReportProgress)
的第二和第三个参数指定将传递给你的委托的参数。
答案 1 :(得分:2)
我会认真考虑使用TPL。处理任务完成时更清洁。