在我使用System.Threading.TimerWindows服务项目之前,我正在做一个小型测试项目.它工作得非常好,但计时器会在一两分钟后自行停止.
测试项目的完整来源是:
using System;
using System.Windows.Forms;
using System.Threading;
namespace studyTimers {
public partial class Form1 : Form {
public Form1() {
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e) {
TimerCallback timerDelegate = new TimerCallback(tick);
System.Threading.Timer testTimer = new System.Threading.Timer(timerDelegate, null, 1000, 1000);
}
void tick(Object obj) {
if (label1.InvokeRequired) {
label1.Invoke(new MethodInvoker(() => tick(obj)));
} else {
label1.Text = DateTime.Now.ToString();
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
显然,目标是用当前时间更新标签.我注意到稍后更新停止了.为什么会这样?
在c#中开发Windows应用商店应用时,我找不到Timer.它的替代/新名称/使用方式是什么?
嗨我想找到一个等待几毫秒的方法,然后再转到下一行代码,
我已经研究过Thread.Sleep,但这会冻结主窗体,我希望它保持活跃状态.
我尝试了定时器和秒表,当他们勾选时应该将它们发布到控制台时冻结主表单.
我找不到在我想要的等待中使用task.delay或后台工作者的方法.
伪代码:
Wait 2 - 6 seconds
Log "waiting"
Log "waiting"
Log "waiting"
Stop Waiting - Run next line of code.
Run Code Online (Sandbox Code Playgroud)
我尝试过的方法只是冻结表单并在之后填充日志,我只想要一个简单的等待方法而不冻结表单而不必处理被调用的事件,这意味着下一行不会运行.
任何帮助都会很棒,因为我还是c#的新手,它让我有点生气:(
我有一个需要每10秒执行一次的线程.该线程包含对另一台服务器上的数据库的多次调用(12-15).此外,它还可以访问大约3个文件.因此,将会有相当多的IO和网络开销.
执行上述操作的最佳策略是什么?
一种方法是使用sleep方法和while循环,但这将是一个糟糕的设计.
在这种情况下,类似于Timer的类会有用吗?另外,最好是创建几个线程(一个用于IO,一个用于JDBC),而不是让它们在一个线程中运行?
当我在timeit()之外运行下面的代码时,它似乎立即完成.但是当我在timeit()函数中运行它时,需要更长的时间.为什么?
>>> import timeit
>>> t = timeit.Timer("3**4**5")
>>> t.timeit()
16.55522028637718
Run Code Online (Sandbox Code Playgroud)
使用:Python 3.1(x86) - AMD Athlon 64 X2 - WinXP(32位)
我有一个System.Threading.Timer,每10毫秒调用一次适当的事件处理程序(回调).该方法本身不是可重入的,有时可能会超过10毫秒.因此,我想在方法执行期间停止计时器.
码:
private Timer _creatorTimer;
// BackgroundWorker's work
private void CreatorWork(object sender, DoWorkEventArgs e) {
_creatorTimer = new Timer(CreatorLoop, null, 0, 10);
// some other code that worker is doing while the timer is active
// ...
// ...
}
private void CreatorLoop(object state) {
// Stop timer (prevent reentering)
_creatorTimer.Change(Timeout.Infinite, 0);
/*
... Work here
*/
// Reenable timer
_creatorTimer.Change(10, 0);
}
Run Code Online (Sandbox Code Playgroud)
MSDN声明在线程池的单独线程中调用回调方法(每次定时器触发).这意味着如果我停止计时器方法中的第一件事它仍然不会阻止计时器触发并在第一个有机会停止计时器之前运行该方法的另一个实例.
也许应该锁定计时器(甚至是非重入方法本身)?在执行其回调(和非重入)方法期间阻止计时器触发的正确方法是什么?
所以假设我们有4个Div(3个隐藏,1个可见),用户可以通过javascript/jQuery在它们之间切换.
我想计算在每个Div上花费的时间,并将包含该时间的xhr发送到服务器以将其存储在数据库中.当用户切换div视图时,将发送此xhr.
我怎样才能做到这一点?任何提示将不胜感激.
谢谢,
我有一个设置计时器的函数,并在计时器到期时调用自身.
我想知道的是清除函数顶部的计时器是不好的做法.
这是因为我将不时地异步调用该函数,如果我不先清除定时器,我将同时运行两个.
我意识到我可以在我对该函数进行另一次调用之前清除计时器,但是我想知道如果我只是在包含计时器的函数内部保持cleartimeout调用它是否会导致任何浏览器出现问题.
另一个想法 - 我可以在进行cleartimeout调用之前测试timer变量,看看它是否是一个计时器?
这是一些示例代码:
function onAir(){
// reset timer
clearTimeout(timer);
$.getJSON("http://mywebsite.com?format=json&callback=?",function(data){
if(data.result == '1'){
do stuff here
}
else{
do other stuff here
}
});
// start timer
timer = setTimeout("onAir()",60000);
}
Run Code Online (Sandbox Code Playgroud)
谢谢你和我分享你的大脑!
肯尼
我正在system.Timers.Timer用来创建一个计时器.
public System.Timers.Timer timer = new System.Timers.Timer(200);
private void btnAutoSend_Click(object sender, EventArgs e)
{
timer.Enabled = true;
timer.Elapsed += new System.Timers.ElapsedEventHandler(send);
timer.AutoReset = true;
}
public void send(object source, System.Timers.ElapsedEventArgs e)
{
this.rtbMsg.AppendText("psyche-->" + receiver + ": hello\n");
}
Run Code Online (Sandbox Code Playgroud)
发送函数中的接收器是我在使用函数时需要设置的参数,但是当我在发送函数中添加参数时,如:
public void send(object source, System.Timers.ElapsedEventArgs e,string receiver)
Run Code Online (Sandbox Code Playgroud)
然后它会抛出一个错误.在检查了MSDN之后,它说ElapsedEventArgs仅适用于这些不会产生数据的函数.
我怎么解决这个问题?我的程序不是windows.Form,所以我不能使用System.Windows.Forms.Timer.
我的脚本/游戏/东西使游戏对象向右移动,当我点击舞蹈(我创建的按钮)时,它停止.然后当计数器(我可能不需要计数器,但我想要等待3秒)达到3(一旦你点击舞蹈计数器开始)我的游戏对象假设继续向右移动.
如果你能纠正那些很酷的代码.如果你能纠正它并向我解释我做错了什么就会更加棒极了.我刚开始在Unity上学习C#.
using System;
using UnityEngine;
using System.Collections;
public class HeroMouvement : MonoBehaviour
{
public bool trigger = true;
public int counter = 0;
public bool timer = false;
// Use this for initialization
void Start()
{
}
// Update is called once per frame
void Update()
{ //timer becomes true so i can inc the counter
if (timer == true)
{
counter++;
}
if (counter >= 3)
{
MoveHero();//goes to the function moveHero
}
if (trigger == true)
transform.Translate(Vector3.right …Run Code Online (Sandbox Code Playgroud)