C# web看板中如何让 程式每5分钟执行一个函数,我好将 网页上某Label 控件赋上新值-

軍哥 2018-01-03 10:19:58
关于web每十秒重新执行函数,各位大神该应该如何写,谢谢?
开发平台是VS 2010 ,语言为C#
目前代码如下,

bool bStop=true;
int i = 1;
protected void Page_Load(object sender, EventArgs e)
{
//定义线程
Thread LogThread = new Thread(new ThreadStart(DoService));
//设置线程为后台线程,那样进程里就不会有未关闭的程序了
LogThread.IsBackground = true;
if (bStop == true)
{
LogThread.Start();//起线程
}
}

private void DoService()
{
while (true)
{
bStop = false;
SendToService();
System.Threading.Thread.Sleep(300000);
}
}
public void SendToService()
{
i++;
Label1.Text = Convert.ToString(i);
}
这样 前端的 label其值一直是2,没有变化,这是什么原因,求帮助! ,因首次写webform ,所以指教时 最好可附上代码.
谢谢大家.
...全文
667 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
desperaso 2018-01-05
  • 打赏
  • 举报
回复

function loadXMLDoc(type,sendHtml)
    {
        var xmlhttp;
        if (username != null)
        {
            if (window.XMLHttpRequest)  {
                xmlhttp = new XMLHttpRequest();
            }
            else {
                xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
            }
            xmlhttp.onreadystatechange=function()
            {
                if (xmlhttp.readyState==4 && xmlhttp.status==200)
                {
                    document.getElementById("message-take").innerHTML = xmlhttp.responseText;
                }
            }
            if (type == "get") { //取得数据信息
                xmlhttp.open("POST", "http://127.0.0.1/receive.aspx?type=get" + "&uid=" + escape(username) + "&taker=" + document.getElementById('take-class').value, true); //传递页面
                xmlhttp.send();
            } else if (type == "send") { //发送数据信息
                var nowTime = new Date().getTime();
                xmlhttp.open("POST", "http://127.0.0.1/receive.aspx?type=send×tamp=" + nowTime + "&uid=" + escape(username) + "&taker=" + document.getElementById('take-class').value, true);
                sendHtml = html2Escape(sendHtml); //转码,能显示html格式
                var queryString = "msg=" + escape(sendHtml); //发送的内容
                xmlhttp.setRequestHeader("Content-Length", queryString.lenght); //发送的内容长度
                xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;"); //发送的内容编码
                xmlhttp.send(queryString);
            }
           ScrolltoBottom(); //滚动保持最底部
            setTimeout("loadXMLDoc('get','')", 1000); //1秒执行一次
        }
    }
秋的红果实 2018-01-03
  • 打赏
  • 举报
回复
web是无状态的,只有让请求延迟返回,才能看到label上显示的变化。这个有难度而且也不现实,放弃这种思路! 问题转为: 前台每隔5秒(用js),调用一次后台的方法 网上一搜一大把
  • 打赏
  • 举报
回复
你web网页上直接meta标签设置几秒钟重新刷新页面就行了,不过这样虽然简单,但会有闪烁现象,所以如果追求好看,那就像楼上说的,用js定期ajax访问数据,当然更高级的可以用SignalR
軍哥 2018-01-03
  • 打赏
  • 举报
回复
引用 4 楼 hanjun0612 的回复:
通过js的settimeout之类的。 或者使用 webform的ajax服务器控件timer。
大家可看好 ,我是专门工厂内写WINFORM的, 第一次修改一个WEB 看板,你们说的英文技术语我根本比较蒙,能给个代码示例的不, 这个隔行如隔山啊 ,WIN,WEB 就是二个世界.,.,,,, 谢谢大家.
軍哥 2018-01-03
  • 打赏
  • 举报
回复
引用 1 楼 cyg17173 的回复:
思路错了。 web看板? 那就不应该用服务器事件啊,WebForm 会根据IIS配置情况进行超时处理。比如半小时页面就失效了。。 所以应该用客户端脚本 js + html + ajax 轻量级开发搞定。

JS定时器:

1、window.setTimeout(function(){},3000)

延迟3秒执行

2、window.setInterval(function(){},3000)

也叫重复器,每3秒重复相同的事件

 

关闭定时器:

var timer = window.setTimeout(function(){

  window.clearTimeout("timer");

},3000);

var timer = window.setInterval(function(){

  window.clearInterval("timer");

},3000);
兄弟,你这个没赋值 的语句啊,
正怒月神 2018-01-03
  • 打赏
  • 举报
回复
通过js的settimeout之类的。 或者使用 webform的ajax服务器控件timer。
  • 打赏
  • 举报
回复
page_load 方法一执行完毕,不等你 LogThread 中的过程真正执行,页面生命周期就结束了,页面 Render 过程结束了。那么你以后再去修改 Label1.Text,毫无意义,根本不会输出到客户端。
  • 打赏
  • 举报
回复
只能从客户端去定期请求,,,,顺序反了。。。。。
cyg17173 2018-01-03
  • 打赏
  • 举报
回复
思路错了。 web看板? 那就不应该用服务器事件啊,WebForm 会根据IIS配置情况进行超时处理。比如半小时页面就失效了。。 所以应该用客户端脚本 js + html + ajax 轻量级开发搞定。

JS定时器:

1、window.setTimeout(function(){},3000)

延迟3秒执行

2、window.setInterval(function(){},3000)

也叫重复器,每3秒重复相同的事件

 

关闭定时器:

var timer = window.setTimeout(function(){

  window.clearTimeout("timer");

},3000);

var timer = window.setInterval(function(){

  window.clearInterval("timer");

},3000);
軍哥 2018-01-03
  • 打赏
  • 举报
回复
引用 14 楼 sp1234 的回复:
[quote=引用 11 楼 jack_33 的回复:] ASPX中相关的语句为 不同编程方式,其写法 不相同,相对写多了WINFORM ,对于WEB 的什么计时器, 前台,后台根本无概念. 我目前只需要完成上面的功能, 其它的也不需再使用到.,所以诚心帮忙的 请简单 明白的 给出个前端使用 何 代码 ,后端如何做. (我是初学者 ,对WEB 是一窍不通) 今天下午又搞了半天,脑袋快炸了.
我看你使用的以前的 webform 编程方式。如果要“快速开发”,那么还是暂时先放弃 ajax,放弃 setInterval 这种写法! 你可以使用 asp.net ajax 技术,而不是客户端的 ajax 技术。我以前写过一个例子:http://bbs.csdn.net/topics/390631332 我们7、8年前已经不用这些技术。但是这些对于你现在还是合适的。[/quote] 谢谢了 ,ASP方面 完全 没看懂, 如天书样 , 不搞了 , ,,
軍哥 2018-01-03
  • 打赏
  • 举报
回复
引用 17 楼 yenange 的回复:
[quote=引用 16 楼 jack_33 的回复:] [quote=引用 15 楼 yenange 的回复:] 先花一个月时间来补习 js , jQuery, html 吧, 最基本的知识还是必备的, 不要一个劲往 C# 方向想
一个月太久 , 这个是急要的 , 源代码也是软件商写的 ,我只是略改动下 , 目前 能够实现单次调用 ,但重复刷新做不了 , 这东西 还比较陌生 , 看大家说的比较简单,所以 应也只是一功能 ,大家就不能讲解的清细点不[/quote] 花钱请附近懂这个的朋友吃个饭让人家帮忙吧, 你一点都不懂, 给代码给你, 你也很难拼凑好的了[/quote] 今天 我又折了一天, 还是找不到方向 , 刚把代码给软件商了 , 不搞了 , 谢谢大家热情参于. 这个WEB 还是比较深奥,,,
吉普赛的歌 2018-01-03
  • 打赏
  • 举报
回复
引用 16 楼 jack_33 的回复:
[quote=引用 15 楼 yenange 的回复:] 先花一个月时间来补习 js , jQuery, html 吧, 最基本的知识还是必备的, 不要一个劲往 C# 方向想
一个月太久 , 这个是急要的 , 源代码也是软件商写的 ,我只是略改动下 , 目前 能够实现单次调用 ,但重复刷新做不了 , 这东西 还比较陌生 , 看大家说的比较简单,所以 应也只是一功能 ,大家就不能讲解的清细点不[/quote] 花钱请附近懂这个的朋友吃个饭让人家帮忙吧, 你一点都不懂, 给代码给你, 你也很难拼凑好的了
軍哥 2018-01-03
  • 打赏
  • 举报
回复
引用 15 楼 yenange 的回复:
先花一个月时间来补习 js , jQuery, html 吧, 最基本的知识还是必备的, 不要一个劲往 C# 方向想
一个月太久 , 这个是急要的 , 源代码也是软件商写的 ,我只是略改动下 , 目前 能够实现单次调用 ,但重复刷新做不了 , 这东西 还比较陌生 , 看大家说的比较简单,所以 应也只是一功能 ,大家就不能讲解的清细点不
吉普赛的歌 2018-01-03
  • 打赏
  • 举报
回复
先花一个月时间来补习 js , jQuery, html 吧, 最基本的知识还是必备的, 不要一个劲往 C# 方向想
  • 打赏
  • 举报
回复
引用 11 楼 jack_33 的回复:
ASPX中相关的语句为 不同编程方式,其写法 不相同,相对写多了WINFORM ,对于WEB 的什么计时器, 前台,后台根本无概念. 我目前只需要完成上面的功能, 其它的也不需再使用到.,所以诚心帮忙的 请简单 明白的 给出个前端使用 何 代码 ,后端如何做. (我是初学者 ,对WEB 是一窍不通) 今天下午又搞了半天,脑袋快炸了.
我看你使用的以前的 webform 编程方式。如果要“快速开发”,那么还是暂时先放弃 ajax,放弃 setInterval 这种写法! 你可以使用 asp.net ajax 技术,而不是客户端的 ajax 技术。我以前写过一个例子:http://bbs.csdn.net/topics/390631332 我们7、8年前已经不用这些技术。但是这些对于你现在还是合适的。
  • 打赏
  • 举报
回复
那些说什么“<%= ..... 这种写法调用 asp.net”博客上的说法都不是正规教程上的说法,实际上 asp 脚本根本不可能这样来从客户端调用 asp.net 页面。 你要真正学习 ajax 访问 asp.net 数据服务(例如访问 ashx)的设计。
  • 打赏
  • 举报
回复
引用 10 楼 jack_33 的回复:
源代码如下- 1.default.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="大屏幕BS.Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>李尔电子电器工厂修护区大屏幕警示系统</title>.......
你写的[code=javascript]....<%=Getstr()%>";这类代码并不会访问 asp.net 端的 Getstr 函数。你可以打开浏览器看看这个地方的 html 源代码就一下在明白了,我相信你有这个基础,可以一下子看懂问题出在哪里。“页面生命周期”机制,在页面 Render 的时候一行性地把 Getstr 函数的值放到 html 字符输出流中,仅仅一次。
軍哥 2018-01-03
  • 打赏
  • 举报
回复
ASPX中相关的语句为 var t1 = window.setInterval(hello, 10000); function hello() { document.getElementById("grouplist").innerText = serverDateTime.format('yyyy-MM-dd HH:mm:ss') + "<%=Getstr()%>"; } 2. default.aspx.cs [code=csharp]using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.Services; using System.Xml.Linq; using System.Data; using System.Xml; using System.Data.Linq; using System.Collections; using ChemTrace.Tools; using System.Threading; namespace 大屏幕BS { public partial class Default : System.Web.UI.Page { public static string strlist = ""; int k = 0; int j = 1; protected void Page_Load(object sender, EventArgs e) { //loadproductlist(); } public string Getstr() { DataTable dt = Service.GetProductList(); string str = ""; if (dt.Rows.Count > 0) { for (int i = 0; i < dt.Rows.Count; i++) { str += dt.Rows[i]["custome"].ToString() + " 待维修 " + dt.Rows[i]["qty"].ToString() + " 片 "; } strlist = str; // Label1.Text = strlist; } else { strlist = ""; /// Label1.Text = strlist; } return strlist; } } } 不同编程方式,其写法 不相同,相对写多了WINFORM ,对于WEB 的什么计时器, 前台,后台根本无概念. 我目前只需要完成上面的功能, 其它的也不需再使用到.,所以诚心帮忙的 请简单 明白的 给出个前端使用 何 代码 ,后端如何做. (我是初学者 ,对WEB 是一窍不通) 今天下午又搞了半天,脑袋快炸了.
軍哥 2018-01-03
  • 打赏
  • 举报
回复
源代码如下- 1.default.aspx [code=csharp]<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="大屏幕BS.Default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>李尔电子电器工厂修护区大屏幕警示系统</title> <script language="javascript" type="text/javascript" src="Scripts/Js.js"></script> <script language="javascript" type="text/javascript" src="Scripts/XmlTable.js"></script> <style type="text/css"> body { font-family: 微软雅黑,宋体; } </style> <script type="text/javascript" language="javascript"> //var timer2 = 600000; //数据读取刷新时间,单位毫秒(1000毫秒=1秒) var timer3 =5000; //数据显示刷新时间,单位毫秒(1000毫秒=1秒) var screenWidth = 1900; //屏幕宽度 var screenHeight = 1080; //屏幕高度,单位像素 var pageSize = 8; //每页显示几行 var isInterval1running = false; var isInterval2running = false; //var isInterval3running = false; var serverDateTime = ""; var interval1; //刷新时间,1秒1次 var interval2; //刷新数据,600秒1次 var interval3; //刷新页面,10秒1次 var currentPage1 = 1; var currentPage2 = 1; var t1 = window.setInterval(hello, 10000); function Init() { TableTitle.width = screenWidth + "px"; TableMain.width = screenWidth + "px"; TableBottom.width = screenWidth + "px"; //document.getElementById("SpanTimer2").innerText = timer2 / 1000; document.getElementById("SpanTimer3").innerText = timer3 / 1000; document.getElementById("TableData1").style.height = screenHeight - 200; document.getElementById("TableData2").style.height = screenHeight - 200; TimerDo1(); isInterval1running = true; //TimerDo2(); //isInterval2running = true; interval1 = window.setInterval(TimerDo1, 1000); //interval2 = window.setInterval(TimerDo2, timer2); TimerDo3(); interval3 = window.setInterval(TimerDo3, timer3); } function hello() { document.getElementById("grouplist").innerText = serverDateTime.format('yyyy-MM-dd HH:mm:ss') + "<%=Getstr()%>"; } // function TimerDo2() { // if (!isInterval2running) { // isInterval2running = true; // PageMethods.GetData(OnGetData); // } // } // function OnGetData(result) { // isInterval2running = false; // xmlDoc.loadXML(result); // nodeData1 = xmlDoc.documentElement.selectSingleNode("Data1"); // nodeData2 = xmlDoc.documentElement.selectSingleNode("Data2"); // if (!isInterval3running) { // isInterval3running = true; // TimerDo3(); // } // } function TimerDo3() { PageMethods.GetHtml(1, currentPage1, pageSize, OnGetHtml); PageMethods.GetHtml(2, currentPage2, pageSize, OnGetHtml); } function OnGetHtml(result) { var t = result.split("|||"); var mode = parseInt(t[0]); var recordcount = parseInt(t[1]); var pagecount = parseInt(t[2]); var currentpage = parseInt(t[3]); var nextpage = currentpage + 1; if (nextpage > pagecount) { nextpage = 1; } eval("currentPage" + mode + " = " + nextpage); var html = t[4]; document.getElementById("DivData" + mode).innerHTML = html; document.getElementById("SpanRecordCount" + mode).innerText = recordcount; document.getElementById("SpanPage" + mode).innerText = currentpage + " / " + pagecount; if (mode == 1) { var finishrate; if (recordcount == 0) { finishrate = "100.00%" } else { var recordcount2 = parseInt(document.getElementById("SpanRecordCount2").innerText); if (isNaN(recordcount2) || recordcount2 == 0) { finishrate = "0.00%" } else { finishrate = parseInt(recordcount2 / (recordcount + recordcount2) * 100) + ".00%"; } document.getElementById("SpanFinishRate" + mode).innerText = finishrate; } } } function TimerDo1() { if (!isInterval1running) { isInterval1running = true; if (serverDateTime == "") { PageMethods.GetServerDateTime(OnGetServerDateTime); } else { serverDateTime.setTime(serverDateTime.getTime() + 1000); ShowServerDateTime(); isInterval1running = false; } } } function OnGetServerDateTime(result) { serverDateTime = new Date(result); ShowServerDateTime(); isInterval1running = false; } function ShowServerDateTime() { document.getElementById("SpanserverDateTime").innerText = serverDateTime.format('yyyy-MM-dd HH:mm:ss'); } </script> </head> <body onload="Init();" style="padding: 5px"> <form id="form1" runat="server"> <asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true"> </asp:ScriptManager> <table width="100%" border="0" cellspacing="0" cellpadding="0" id="TableTitle"> <tr> <td height="80" align="center"> <span style="font-size: 55pt">LEAR DEBUG 系统</span> </td> </tr> </table> <table width="100%" border="0" cellspacing="0" cellpadding="0" id="TableMain"> <tr> <td width="50%" align="center" valign="top"> <table width="95%" border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse; border-style: solid; border-color: #000000" id="TableData1"> <tr> <td align="center" style="padding: 10px" valign="top" bgcolor="#ffffdd"> <table width="100%" border="0" cellspacing="0" cellpadding="0"> <tr> <td align="center"> <span style="font-size: 28pt">待DEBUG</span> </td> </tr> </table> <div style="height: 10px;"> </div> <table width="100%" border="0" cellspacing="0" cellpadding="0"> <tr> <td valign="top"> <div id="DivData1" >   </div> </td> </tr> </table> </td> </tr> </table> <div style="height: 10px"> </div> <table width="95%" border="0" cellspacing="0" cellpadding="0"> <tr> <td align="right"> 总记录:<span id="SpanRecordCount1"></span> 条 当前第:<span id="SpanPage1"></span> 页 </td> </tr> </table> </td> <td width="50%" align="center" valign="top"> <table width="95%" border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse; border-style: solid; border-color: #000000" id="TableData2"> <tr> <td align="center" style="padding: 10px" valign="top" bgcolor="#FFD2D2"> <table width="100%" border="0" cellspacing="0" cellpadding="0"> <tr> <td align="center"> <span style="font-size: 28pt">超48小时</span> </td> </tr> </table> <div style="height: 10px"> </div> <table width="100%" border="0" cellspacing="0" cellpadding="0"> <tr> <td valign="top"> <div id="DivData2">   </div> </td> </tr> </table> </td> </tr> </table> <div style="height: 10px"> </div> <table width="95%" border="0" cellspacing="0" cellpadding="0"> <tr> <td align="right"> 总记录:<span id="SpanRecordCount2"></span> 条 当前第:<span id="SpanPage2"></span> 页 </td> </tr> </table> </td> </tr> </table> <div style="height: 30px"> </div> <table width="100%" id="TableBottom" border="0" cellspacing="0" cellpadding="0" id="TableStatusBar"> <tr>
軍哥 2018-01-03
  • 打赏
  • 举报
回复
引用 8 楼 From_TaiWan 的回复:
web是无状态的,只有让请求延迟返回,才能看到label上显示的变化。这个有难度而且也不现实,放弃这种思路!

问题转为:
前台每隔5秒(用js),调用一次后台的方法
网上一搜一大把


网上的方法,好向不实用.,
引用如下,
<script>
function hello(){
alert("hello");
}
//重复执行某个方法
var t1 = window.setInterval(hello,1000);
var t2 = window.setInterval("hello()",3000);
//去掉定时器的方法
window.clearInterval(t1);
</script>
------------------------------------
我使用后 效果如下图-



110,499

社区成员

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

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

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