ASP.NET如何实现线程中调用JS函数?

ineedchrist 2009-12-16 12:28:14
在ASP.NET里,同一个页面,有一个js写的function
如:test.aspx内
<script type="text/javascript">
function show(x)
{
alert(x);
}
</script>
test.aspx.cs内
有两个 button,
//button1,这个可以正常运行
protected void Button1_Click(object sender, EventArgs e)
{

Page.RegisterStartupScript("test", "<script>show(" + 3 + ");</script>");

}

// button2,这个不能正常运行,但是不报错,很奇怪
protected void Button2_Click(object sender, EventArgs e)
{
System.Threading.Thread t = new System.Threading.Thread(new System.Threading.ThreadStart(t_t));
t.Start();
}
void t_t()
{
try
{
Page.RegisterStartupScript("test", "<script>show(" + 3 + ");</script>");
}
catch (Exception s)
{
Response.Write(s.ToString());
throw;
}

}


我的目地就是要调前台一个JS的Function几千次,当然Funtiocn里不可能只有Alert,如果直接循环调,太慢了
...全文
250 16 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
ineedchrist 2009-12-16
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 happy664618843 的回复:]
可以用IsAynacResult调用 返回结果 在page_load事件中Page.RegisterStartupScript调用js方法
[/Quote]

可否加一下我的MSN:ineed_christ@msn.com 或者qq:303147952
happy664618843 2009-12-16
  • 打赏
  • 举报
回复
可以用IsAynacResult调用 返回结果 在page_load事件中Page.RegisterStartupScript调用js方法
ineedchrist 2009-12-16
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 momonn 的回复:]
应该在开辟的新线程中通过JS传值,请google 异步回调
在新线程中调用Page.RegisterStartupScript是不可以的,无任何效果,也无错误提示。
[/Quote]

momonn及其它朋友,可否加一下我的MSN:ineed_christ@msn.com 或者qq:303147952
ineedchrist 2009-12-16
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 cuike519 的回复:]
两点:
1、你这些脚本不是在服务器上运行的,所以这不叫在线程中调用JS函数。
2、你这个可以正常运行的版本是将js函数输出到客户端浏览器,由浏览器执行的。

如果你描述的这个可运行的满足你的要求那么你可以这样做:

C# codebutton1_click(...){for(int i=0;i<1000;i++){
Page.RegisterStartupScript("test"+i.ToString(),"show...");
}
}

这样做的后果是,可能在打开浏览器的时候会产生浏览器长时间无响应(要执行1000次test)。

你还可以这样做,稍微修改一下show方法,其他的都不变:
JScript codefunction show(times){if(times>0){// your logic code here setTimeout(show(times-1 ),1000);
}else{return;
}
}上面的代码是伪代码,不能直接运行,但是意思我想是可以表达清楚的。
[/Quote]

没明白你第二个解决方法的意思
cuike519 2009-12-16
  • 打赏
  • 举报
回复
两点:
1、你这些脚本不是在服务器上运行的,所以这不叫在线程中调用JS函数。
2、你这个可以正常运行的版本是将js函数输出到客户端浏览器,由浏览器执行的。

如果你描述的这个可运行的满足你的要求那么你可以这样做:

button1_click(...){
for( int i=0;i<1000;i++){
Page.RegisterStartupScript("test"+i.ToString(),"show...");
}
}


这样做的后果是,可能在打开浏览器的时候会产生浏览器长时间无响应(要执行1000次test)。

你还可以这样做,稍微修改一下show方法,其他的都不变:
function show(times){
if(times>0){
// your logic code here
setTimeout(show(times -1 ),1000);
}
else{
return;
}
}
上面的代码是伪代码,不能直接运行,但是意思我想是可以表达清楚的。
CopperBell 2009-12-16
  • 打赏
  • 举报
回复
应该在开辟的新线程中通过JS传值,请google 异步回调
在新线程中调用Page.RegisterStartupScript是不可以的,无任何效果,也无错误提示。
ineedchrist 2009-12-16
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 wuyq11 的回复:]
string s="";
Page.RegisterStartupScript("test", " <script>show("+s+"); </script>");
Thread.Sleep(100);
[/Quote]

写在哪?这和线程没有关系了呀
ineedchrist 2009-12-16
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 winner2050 的回复:]
不能这么用的。

你开的线程不是当前页面的线程,无法用 Page.RegisterStartupScript

而且B/S结构的软件不能用多线程,边处理边进行任何提示。
[/Quote]
那我的问题应该怎么解决?我是用消息队列,异步接收数据后,要显示在页面上的。
CopperBell 2009-12-16
  • 打赏
  • 举报
回复
楼主的问题应该是如何处理异步回调
wuyq11 2009-12-16
  • 打赏
  • 举报
回复
string s="";
Page.RegisterStartupScript("test", " <script>show("+s+"); </script>");
Thread.Sleep(100);
winner2050 2009-12-16
  • 打赏
  • 举报
回复
不能这么用的。

你开的线程不是当前页面的线程,无法用 Page.RegisterStartupScript

而且B/S结构的软件不能用多线程,边处理边进行任何提示。
tzs2304 2009-12-16
  • 打赏
  • 举报
回复
帮顶
ineedchrist 2009-12-16
  • 打赏
  • 举报
回复
顶起帖子,急需回复!
baoxuetianxia 2009-12-16
  • 打赏
  • 举报
回复
WO1XIANG1我想.net培训 家里人 不同意 汗,我快成往届生了
lvfeng19806001 2009-12-16
  • 打赏
  • 举报
回复
帮顶吧!
ineedchrist 2009-12-16
  • 打赏
  • 举报
回复
顶起帖子,急需回复!

62,244

社区成员

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

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

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

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