我感觉好像应该用Timer,但具体怎么用不解。尤其是在Asp.net并发环境下……
能给点示例代码更好。
13 个解决方案
#1
使用异步调用 等LX来贴代码
#2
我知道Ajax里从传送数据要用异步传输,
C#里的类似,代码一时找不到
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#里的类似,代码一时找不到
#3
技术菜鸟,只知道这些了
#4
在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文件的话,在项目上点右键加之。
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文件的话,在项目上点右键加之。
#5
用ajax
#6
使用ajax.dll或者ajaxpro.dll或其它的
function getDocument()
{
pagename.functionServer();
setTimeout("getDocument()", 5*60*1000);
}
function getDocument()
{
pagename.functionServer();
setTimeout("getDocument()", 5*60*1000);
}
#7
拒说timer会刷新,体验不是太好。ajax.dll的例子可以网上找找,或者看我博客里的那个前台调用后台方法的文章!
#8
ajax是个好方案,但要注意它要客户端浏览器来发出请求,也就是说如果客户端没有访问你的发送请求的页面,你的代码是不会被执行的。写在global中一定会执行,但它是影响全局的。
具体情况看你的需求了。
#2楼,GET可能会遇到“查询字符串过长”的问题,还是POST吧。。。
具体情况看你的需求了。
#2楼,GET可能会遇到“查询字符串过长”的问题,还是POST吧。。。
#9
可能是我没说清楚。
和AJAX完全没有关系,我根本用不到前台。我就在后台的程序里,比如BLL层,程序 自动的每隔一段时间执行一段代码即可。
和AJAX完全没有关系,我根本用不到前台。我就在后台的程序里,比如BLL层,程序 自动的每隔一段时间执行一段代码即可。
#10
这应该是我想要的,但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);
}
}
这种写法,是不是会有多线程方面的问题,而且我总感觉这样写很怪。
#11
学习了
#12
没人知道么?
#13
再顶一下,没人就结贴了
#1
使用异步调用 等LX来贴代码
#2
我知道Ajax里从传送数据要用异步传输,
C#里的类似,代码一时找不到
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#里的类似,代码一时找不到
#3
技术菜鸟,只知道这些了
#4
在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文件的话,在项目上点右键加之。
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文件的话,在项目上点右键加之。
#5
用ajax
#6
使用ajax.dll或者ajaxpro.dll或其它的
function getDocument()
{
pagename.functionServer();
setTimeout("getDocument()", 5*60*1000);
}
function getDocument()
{
pagename.functionServer();
setTimeout("getDocument()", 5*60*1000);
}
#7
拒说timer会刷新,体验不是太好。ajax.dll的例子可以网上找找,或者看我博客里的那个前台调用后台方法的文章!
#8
ajax是个好方案,但要注意它要客户端浏览器来发出请求,也就是说如果客户端没有访问你的发送请求的页面,你的代码是不会被执行的。写在global中一定会执行,但它是影响全局的。
具体情况看你的需求了。
#2楼,GET可能会遇到“查询字符串过长”的问题,还是POST吧。。。
具体情况看你的需求了。
#2楼,GET可能会遇到“查询字符串过长”的问题,还是POST吧。。。
#9
可能是我没说清楚。
和AJAX完全没有关系,我根本用不到前台。我就在后台的程序里,比如BLL层,程序 自动的每隔一段时间执行一段代码即可。
和AJAX完全没有关系,我根本用不到前台。我就在后台的程序里,比如BLL层,程序 自动的每隔一段时间执行一段代码即可。
#10
这应该是我想要的,但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);
}
}
这种写法,是不是会有多线程方面的问题,而且我总感觉这样写很怪。
#11
学习了
#12
没人知道么?
#13
再顶一下,没人就结贴了