C#web可以多线程嘛 大神在哪里

qq_30911013 2015-09-09 10:58:15
 for (int i = 0; i < dt.Rows.Count; i++)
{
string simplePinYin = PinYinConverter.GetFirst(dt.Rows[i]["约课场所"].ToString());
string directoryName = Regex.Replace(simplePinYin, @"[\b(|\b)|\b(|\b)]", "-");
if (!Directory.Exists(Server.MapPath(@"StoreXml/" + directoryName)))
{
Directory.CreateDirectory(Server.MapPath(@"StoreXml/" + directoryName));
}

DataRow[] drArr = dt.Select("约课场所='" + dt.Rows[i]["约课场所"] + "'");
DataTable dtNew = dt.Clone();
foreach (DataRow t in drArr)
{
dtNew.ImportRow(t);
}
for (int k = 0; k < dtNew.Rows.Count; k++)
{
DataRow[] drArrChild = dtNew.Select("日期='" + dtNew.Rows[k]["日期"] + "'");
DataTable dtChild = dtNew.Clone();
foreach (DataRow t in drArrChild)
{
dtChild.ImportRow(t);
}
string xmlData = DataTableToXml(dtChild);
string time = dtNew.Rows[k]["日期"].ToString();
string xmlName = time.Replace(" ", "-");
if (!File.Exists(Server.MapPath(@"StoreXml/" + directoryName + "/" + xmlName + ".xml")))
{
File.Create(Server.MapPath(@"StoreXml/" + directoryName + "/" + xmlName + ".xml")).Close();
var sw = new StreamWriter(Server.MapPath(@"StoreXml/" + directoryName + "/" + xmlName + ".xml"), true, Encoding.UTF8);
sw.WriteLine("<?xml version=\"1.0\" encoding=\"" + "UTF-8" + "\" standalone=\"yes\"?>");
sw.Write(xmlData);
sw.Close();
nowNum++;
if (nowNum == (Convert.ToInt32(sum / 100)) * x)
{
var width = 3 * x;
ClientScript.RegisterStartupScript(ClientScript.GetType(), "myscript", "<script>progressBar(" + width + ");</script>");
x++;
}
}
}
}

大概想要的效果就是 总共要生成N个文件,生成每一个文件的同时,将width传给前台js,实现进度条

调试代码是运行了,可是并没有什么用,这个是线程原因?如果是的能举个web线程实例吗,如果不是 有什么好的方法建议说一下 谢谢大家了。
...全文
261 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
於黾 2015-09-10
  • 打赏
  • 举报
回复
其实你的问题跟多线程无关. 你的多线程确实能够正常工作的,只是显示不出来,这不是线程的问题. 你的问题在于,不知道webform的执行机制 webform是BS架构,Browser/Server 你的IE是客户端,服务端部署在服务器的IIS里 IE和服务端通信是利用http协议 http协议是基于tcp协议的短连接协议,也就是只能一次请求,一次响应 不请求,你的页面就变成了脱机页面,跟服务端无关了 除非你使用任何富客户端技术,让IE和服务端能够保持通信,而不要脱机,你才能够从服务器的线程里取回执行结果.否则服务器那头线程怎么执行,跟IE本来也没有任何关系. 至于如何通信,可以轮询,也可以推送. 比如你线程执行完毕,就写入数据库,然后前台(IE)用ajax对数据库进行轮询 或者研究html5,singleR之类的技术,或者ActiveX插件,总之技术手段很多,看你选择了
  • 打赏
  • 举报
回复
这是一个毫无概念基础的设计。
  • 打赏
  • 举报
回复
引用 2 楼 qq_30911013 的回复:
引用 1 楼 starfd 的回复:
WEB多线程是可以的,但不是你这种用法,你应该是通过websocket来实现推送,可以的话了解下SignalR
小弟我还是新手 ,可不可以具体点,谢谢了。。除了这个推送还有什么方法 ......
你需要能从web原理上来自己理解。在设计上一大堆“过”的思路,并不能掩饰不足。
老李家的小二 2015-09-10
  • 打赏
  • 举报
回复
引用 1 楼 starfd 的回复:
WEB多线程是可以的,但不是你这种用法,你应该是通过websocket来实现推送,可以的话了解下SignalR
网上搜一下啊,一大堆
编程有钱人了 2015-09-10
  • 打赏
  • 举报
回复
你还是没懂web的多线程的含义,asp.net本身就是多线程,你这样写是业务上的多线程 具体实现比较蛮烦
宝_爸 2015-09-10
  • 打赏
  • 举报
回复
http的本质是request, response, 服务器端基本没有办法通知客户端。 要么你自己实现 js轮询,或者使用web socket。 要么使用现成的framework: SignalR。 这里有文章介绍SignalR http://www.asp.net/signalr
qq_30911013 2015-09-09
  • 打赏
  • 举报
回复
引用 1 楼 starfd 的回复:
WEB多线程是可以的,但不是你这种用法,你应该是通过websocket来实现推送,可以的话了解下SignalR
小弟我还是新手 ,可不可以具体点,谢谢了。。除了这个推送还有什么方法 ......
  • 打赏
  • 举报
回复
WEB多线程是可以的,但不是你这种用法,你应该是通过websocket来实现推送,可以的话了解下SignalR

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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