我想请教大家一个取时间的问题.
我的愿意是想在到达某个时间就调用某一事件.
所以当我点击开始时,就记录下现在的系统时间.string time1 = DataTime.Now();然后想再过60分钟就调用另一个按钮事件.
这样该怎么实现!谢谢大家能讲讲吗?其实我有一点思路,就是在当我点击开始的时候就
DateTime time1 = DataTime.Now();
DateTime time2 = time + 60;
if(time2 - time1 <=0)
{
     //调用
}但是应该不对,这个应该写在那个事件中,来控制60分钟时,来调用另一事件

解决方案 »

  1.   

    用js定时读cookies吧,如果直接等60分钟感觉不太现实
      

  2.   

    有好多种方案
    比如搞一个看不见的内框架,每1分钟悄悄刷新一次问主机到时间没有,如果时间到就通知主框架交卷.也可以追追新潮,用AJAX.不过你的主要难点倒不在一小时交卷上面,而是在如何保持客户端已做的答案,不至于刷新后又要重做.
      

  3.   

    bwangel(永远的裤衩) 
    你能详细点说明一下
    搞一个看不见的内框架,每1分钟悄悄刷新一次问主机到时间没有,如果时间到就通知主框架交卷
    这个看不见的框架和刷新吗?
    我能恢复用户的答案
      

  4.   

    本来要睡觉的,无意中看见你的回复,一时兴起,搞了个简单的纯客户端实现,你将就着看吧:这是主文件: default.htm
    <!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>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    <title>无标题文档</title>
    </head><body>
    <script>
    d1 = new Date();
    d1 = d1.getTime();
    d2 = d1 + 60000; //这里假设考试时间1分钟
    function post()
    {
    alert("时间到了,交卷!");
    }
    </script>
    这个内框架是
    <iframe width="0" height="0" src="ask.html"></iframe>
    看不见的<br />XXX考试题...
    </body>
    </html>
      

  5.   

    这是调用的内框架:<!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>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    <title>无标题文档</title>
    </head><body>
    <script language="javascript">
    function ask()
    {
    d = new Date(); 
    if (d < parent.d2)
    {
    alert("还有" + ((parent.d2 - d)/1000) + "秒");
    location.reload();
    }
    else
    parent.post(); //交卷

    }
    setInterval(ask,6000); //每6秒问一次
    </script>
    </body>
    </html>
      

  6.   

    把每个用户的开始时间放在服务器端保存,放在全局缓存中
    用户点击考试的时候,在缓存里取这个时间
    然后根据这个时间,在js端生成定时器计时。
      如果要能恢复用户的答案,那就利用xmlhttp或者iframe与后台进行数据交换(xml格式或者json格式都可以),定时间把答案保存起来,需要时恢复
      我以前做的在线考试系统需求可多多了 赫
      

  7.   

    用html的跳转功能<meta http-equiv="refresh" content="3600;URL=nextPage.html">
    在页面上做一个计时器就ok了
      

  8.   

    为什么不能用js呢?我们做的考试系统就是用js+ajax实现,效果是时间快到提醒,到时自动交卷.原理:
    前台用后台的ajax方法头的一个方法,该方法取得试卷时间.刷新操作由js完成.现在在家没有代码,明天发给你.可以告诉你js+ajax实现没有问题,而且效果还不错. 就算用户刷新的话,也不重新计时.
      

  9.   

    不知道解决了没有,给点代码参考一下:
    前台:
    <body onselectstart="return false" onkeydown="DisableKey()" oncontextmenu="self.event.returnValue=false"
        onload="setTimeout('GetResidualExamPaperTime()', 1000);">
    //
    <script>
    function GetResidualExamPaperTime()
    {
        var pubID=QueryString('pubid');
        document.getElementById("lbl_LastTime").innerHTML=ExamOnline.GetResidualExamPaperTime(pubID).value;
        
        var tmpStr=document.getElementById("lbl_LastTime").innerHTML;
        
        var minute=tmpStr.substr(0,tmpStr.indexOf(':'));
        var second=tmpStr.substr(tmpStr.indexOf(':')+1);
        //
        if(parseInt(minute)<0)
        {
            submitExam();
        }
        setTimeout('GetResidualExamPaperTime()', 1000);
     }
    </script>
    后台:
        /// <summary>
        /// 显示剩余时间
        /// </summary>
        /// <param name="pubID"></param>
        /// <returns></returns>
        [Ajax.AjaxMethod(Ajax.HttpSessionStateRequirement.ReadWrite)]
        public string GetResidualExamPaperTime(string pubID)
        {
            string lastTimeStr = FCD_ExamPaper.GetResidualExamPaperTime(pubID);
            return lastTimeStr;
        }引用Ajax.dll,网上应该可以找到。
      

  10.   

    其实就算怕刷新页面要重新计时,你用数据库或者session以及cookies把考试开始时间记录下来就可以了.这样就算刷新页面也可以计算出考了多少时间了