寻求多线程帮助(急),进来我传文件给你

qq100191677 2010-10-02 02:54:52
我在做一个东西
到多线程这里遇到了问题了

搞了一晚上都没搞好,
请求大虾帮助,,万分感谢
我的qq100291677,,
或者是留下你的qq我加你
我传代码给你
...全文
135 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq100191677 2010-10-03
  • 打赏
  • 举报
回复
顶下
看有人能解决不
qq100191677 2010-10-02
  • 打赏
  • 举报
回复
哎..问题没有解决
纠结
郁闷
qq100191677 2010-10-02
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 sp1234 的回复:]

引用 5 楼 qq100191677 的回复:
thread = new Thread(new ParameterizedThreadStart(Run));
object[] param = { keys, bplist ,path};
thread.Start(param);

参数使用引用类型的变量,这意味着如果你的Run运行中这三个参数(至少是前两个)被thread之外的代码修……
[/Quote]

你说得很对,问题就是这个,
我把outHtml换成结构
可以解决问题吗?
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 qq100191677 的回复:]
thread = new Thread(new ParameterizedThreadStart(Run));
object[] param = { keys, bplist ,path};
thread.Start(param);
[/Quote]
参数使用引用类型的变量,这意味着如果你的Run运行中这三个参数(至少是前两个)被thread之外的代码修改了,那么Run内部的程序也就被搞乱了。

可以先可以只让一个线程跑一下,如果成功,那么说明是这个问题,那么就要仅仅将对象复制之后的副本进行传递。
qq100191677 2010-10-02
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 viewstates 的回复:]

我不清楚你要实现什么,但是你这边写的是没有问题的啊。
你起一个线程,然后在这个线程中再用线程池去执行你的方法RUN,你线程池对应的CALLBACK的方法里面本身又继续包含了上面用线程池执行RUN方法的逻辑。
bplist[i].Run(state.ToString())
[/Quote]
bplist[i].Run(state.ToString())这个方式是为了得到数据的

应为有不同的对象去获取数据
ViewStates 2010-10-02
  • 打赏
  • 举报
回复
我不清楚你要实现什么,但是你这边写的是没有问题的啊。
你起一个线程,然后在这个线程中再用线程池去执行你的方法RUN,你线程池对应的CALLBACK的方法里面本身又继续包含了上面用线程池执行RUN方法的逻辑。
bplist[i].Run(state.ToString())
qq100191677 2010-10-02
  • 打赏
  • 举报
回复

在没人帮助
这贴都要沉入大海了
我都连回了3条了..呀
最后顶次
qq100191677 2010-10-02
  • 打赏
  • 举报
回复
我现在遇到的问题是

线程进入后
就一直在循环里面跑

偶尔跑出来执行以下saveHtml
qq100191677 2010-10-02
  • 打赏
  • 举报
回复

class SpiderProvider
{
Thread thread;
public SpiderProvider(string[] keys,List<BaseParser> bplist,string path)
{
thread = new Thread(new ParameterizedThreadStart(Run));
object[] param = { keys, bplist ,path};
thread.Start(param);
}


private void Run(object param)
{
object[] param2 = (object[])param;
string[] keys = (string[])param2[0];
string path = (string)param2[2];
List<BaseParser> bplist=(List<BaseParser>)param2[1];
foreach (var key in keys)
{

ThreadPool.QueueUserWorkItem(delegate(object state) {

// outHtml out_ = new outHtml();

//Thread[] threads = new Thread[bplist.Count];//线程数组
//for (int i = 0; i < threads.Length; i++)
//{
// object[] param_T = { bplist[i],state.ToString()};//参数

// threads[i] = new Thread(out_.SetContent);
// threads[i].Start(param_T);
//}
//foreach (Thread t in threads) t.Join();


//SaveHtml(out_.templateString, state.ToString(), state.ToString() + out_.FileName, path);
outHtml html = new outHtml();
foreach (BaseParser item in bplist)
{


}
for (int i = 0; i < bplist.Count; i++)
{
html.templateString = html.SetTemp(bplist[i], bplist[i].Run(state.ToString()), state.ToString());//bplist[i].Run(state.ToString())是得到不同对象返回的值

if (i+1==bplist.Count)
{
SpiderForm.AddText("关键字_" + state.ToString() + "_文件保存成功");
File.WriteAllText(path + @"\" + state.ToString() + html.FileName + ".html", html.templateString, Encoding.Default);

}
}
// SaveHtml(html.templateString, state.ToString(), state.ToString() + html.FileName, path);
},key);
}
}

protected void SaveHtml(string content,string key,string fileName,string path)
{

SpiderForm.AddText("关键字"+key+"文件保存成功");
File.WriteAllText(path + @"\" + fileName + ".html", content, Encoding.Default);
}

}




class outHtml
{
public string templateString;
public string FileName { get; set; }//文件名
public outHtml()
{
templateString = File.ReadAllText("template.htm", Encoding.Default);//读取模板
}
/// <summary>
/// 设置模板内容
/// </summary>
/// <param name="b">当前采集对象</param>
/// <param name="content"></param>
/// <param name="key"></param>
/// <returns></returns>
public string SetTemp(BaseParser b,string content,string key)
{
switch (b.logo)
{

case "soso":
templateString = templateString.Replace("${Soso}", content);
templateString = templateString.Replace("${title}", b.FileName);
FileName = b.FileName;
break;
case "wenwen":
templateString = templateString.Replace("${Wenwen}", content);
break;
case "sosoBlog":
templateString = templateString.Replace("${SosoBlog}", content);
break;
case "xywy":
templateString = templateString.Replace("${Xywy}", content);
break;
case "_1688":
templateString = templateString.Replace("${_1688}", content);
break;
case "sogou":
templateString = templateString.Replace("${Sougou}", content);
break;
default:
break;
}
return templateString;

}
}

agsqew 2010-10-02
  • 打赏
  • 举报
回复
具体什么问题呢?
qq100191677 2010-10-02
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 caozhy 的回复:]

具体什么问题呢?
[/Quote]

多线程去处理一组数据

处理的结果,乱七八糟的

你愿意帮助我留下qq好不
wuyq11 2010-10-02
  • 打赏
  • 举报
回复
还是贴出问题看看
threenewbee 2010-10-02
  • 打赏
  • 举报
回复
具体什么问题呢?

111,098

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧