如何每隔一段时间就自动执行一段代码(比如调用一个函数)

freeflying1222 2010-04-06 05:05:56
比如,我想每隔5分钟就把DataSet里更新的数据存储到数据库。
我感觉好像应该用Timer,但具体怎么用不解。尤其是在Asp.net并发环境下……
能给点示例代码更好。
...全文
500 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
freeflying1222 2010-04-13
  • 打赏
  • 举报
回复
再顶一下,没人就结贴了
freeflying1222 2010-04-07
  • 打赏
  • 举报
回复
没人知道么?
airlch 2010-04-07
  • 打赏
  • 举报
回复
学习了
freeflying1222 2010-04-07
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 hhhh63 的回复:]

在Global文件的Application_Start事件中加入定时器,我实际使用的部分代码如下:
public static local.dsnews mynews = null;

protected void Application_Start(object sender, EventArgs e)
{
mynews = new local.dsnews();
}

n……
[/Quote]

这应该是我想要的,但System.Timers.Timer timernews = new System.Timers.Timer();不行啊,根本就没有不带参数的重载?

另外比如说我希望的不是在程序开始就开始计时,而是在第一次调用某方法之后,我怎么写,像这样:

public class TimesTest
{
static System.Threading.Timer timer;
public static void TriggerTimes(object o)
{
if (timer==null)
{
timer = new System.Threading.Timer(ShowResult,null,0,5*1000);
}
}

private static void ShowResult(object o)
{
Console.WriteLine(DateTime.Now);
}
}

这种写法,是不是会有多线程方面的问题,而且我总感觉这样写很怪。
freeflying1222 2010-04-07
  • 打赏
  • 举报
回复
可能是我没说清楚。

和AJAX完全没有关系,我根本用不到前台。我就在后台的程序里,比如BLL层,程序自动的每隔一段时间执行一段代码即可。

camperer 2010-04-06
  • 打赏
  • 举报
回复
ajax是个好方案,但要注意它要客户端浏览器来发出请求,也就是说如果客户端没有访问你的发送请求的页面,你的代码是不会被执行的。写在global中一定会执行,但它是影响全局的。
具体情况看你的需求了。
#2楼,GET可能会遇到“查询字符串过长”的问题,还是POST吧。。。
fuda_1985 2010-04-06
  • 打赏
  • 举报
回复
拒说timer会刷新,体验不是太好。ajax.dll的例子可以网上找找,或者看我博客里的那个前台调用后台方法的文章!
fuda_1985 2010-04-06
  • 打赏
  • 举报
回复
使用ajax.dll或者ajaxpro.dll或其它的
function getDocument()
{
pagename.functionServer();
setTimeout("getDocument()", 5*60*1000);
}
echo0808 2010-04-06
  • 打赏
  • 举报
回复
用ajax
hhhh63 2010-04-06
  • 打赏
  • 举报
回复
在Global文件的Application_Start事件中加入定时器,我实际使用的部分代码如下:
public static local.dsnews mynews = null;

protected void Application_Start(object sender, EventArgs e)
{
mynews = new local.dsnews();
}


namespace forexds.local
{
public class dsnews
{
private const int Interval = 4 * 60 * 1000;// 定时4分钟
private DataTable dtNews = null;
private ArrayList rsslist = new ArrayList();

public dsnews()
{
HData data = null;
try
{
data = new HData();
dtNews = data.GetTable("select * from news");
}
catch (Exception ex)
{
HLog.writeLog("dsnews_dsnews: " + ex.Message);
}
finally
{
if (data != null)
data.Dispose();
}

initsource();

System.Timers.Timer timernews = new System.Timers.Timer();
timernews.Interval = Interval;
timernews.AutoReset = true;
timernews.Enabled = true;
timernews.Elapsed += new System.Timers.ElapsedEventHandler(updateTable);
updateTable(null, null);

}


如果没有Global文件的话,在项目上点右键加之。
  • 打赏
  • 举报
回复
技术菜鸟,只知道这些了
  • 打赏
  • 举报
回复
我知道Ajax里从传送数据要用异步传输,
  var xHRObject = false;
if (window.XMLHttpRequest)
{
xHRObject = new XMLHttpRequest();
}
else if (window.ActiveXObject)
{
xHRObject = new ActiveXObject("Microsoft.XMLHTTP");
}

function getData()
{
//Check to see if the XMlHttpRequest object is ready and whether it has
//returned a legitmate response
if (xHRObject.readyState == 4 && xHRObject.status == 200)
{
var xmlDoc = xHRObject.responseXML;
if (window.ActiveXObject)
{
//Load XSL
var xsl = new ActiveXObject("Microsoft.XMLDOM");
xsl.async = false;
xsl.load("MenuDisplay.xsl");

//Transform
var transform = xmlDoc.transformNode(xsl);
var spanb = document.getElementById("menuhere");

}

else
{
var xsltProcessor = new XSLTProcessor();

//Load XSL
XObject = new XMLHttpRequest();
XObject.open("GET", "MenuDisplay.xsl", false);
XObject.send(null);

xslStylesheet = XObject.responseXML;
xsltProcessor.importStylesheet(xslStylesheet);

//Transform
var fragment = xsltProcessor.transformToFragment(xmlDoc, document);

document.getElementById("menuhere").innerHTML = "";
document.getElementById("menuhere").appendChild(fragment);


}

//Display results of transform
if (spanb != null)
{
spanb.innerHTML = transform;
}

//Clear the object and call the getDocument function in 10 seconds
//此乃注册getDocument()方法,10秒一次。
xHRObject.abort();
setTimeout("getDocument()", 10000);
}
}

function getDocument()
{
//Reset the function
xHRObject.onreadystatechange = getData;

//IE will cache the GET request the only way around this is to append a
//different querystring. We add a new date and append it as a querystring
xHRObject.open("GET", "SuiteList.xml?id=" + Number(new Date), true);

xHRObject.send(null);
}

C#里的类似,代码一时找不到
  • 打赏
  • 举报
回复
使用异步调用 等LX来贴代码

62,072

社区成员

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

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

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

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