首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

winform控制程序值启动一次,然后在每隔一段时间自动运行,该如何解决

2012-06-01 
winform控制程序值启动一次,然后在每隔一段时间自动运行我开发了一个小工具:已经是在多线程的条件下自动调

winform控制程序值启动一次,然后在每隔一段时间自动运行
我开发了一个小工具:已经是在多线程的条件下自动调取数据库的链接,然后通过ping.exe判断这个链接是否有效!

现在客户需要,程序启动后,在每隔一段时间他能够自动运行!类似于button的click again,怎么处理,跪求大师!

有过次开发经验的大师,希望能给我点提示!

在线等回复!谢谢

[解决办法]
谁自动运行,你程序不是已经运行了吗,如果定时运行程序,自己添加windows任务
[解决办法]
需要写一段监控代码,实时监控时间,并且计算与上次执行时间之差,如果符合条件则执行,可以使用while(true){...}来实现,需要注意的是使用while这个东西时,每判断一次需要让程序睡眠一下,否则会占用相当高的CPU
[解决办法]

探讨

引用:

谁自动运行,你程序不是已经运行了吗,如果定时运行程序,自己添加windows任务


比如:我的程序启动后执行load()方法,然后load完了后,假如我希望我在不关闭程序的情况下,隔10mins在load()一次!

求详细

[解决办法]
C# code
private void form_Load(){    Action loopAction = MyMethod;    loopAction.BeginInvoke(null,null);}private void MyMethod(){    while(true)    {        //DoSomething        Thread.Sleep(100);    }}
[解决办法]
探讨

C# code

private void form_Load()
{
Action loopAction = MyMethod;
loopAction.BeginInvoke(null,null);
}
private void MyMethod()
{
while(true)
{
//DoSomething
Thread.Sl……

[解决办法]
也可以使用timer:
C# code
使用timerprivate System.Threading.Timer _timer = null;//这个要使用个全局变量,代码不好看private void StartMyWork(){    _timer = new Timer(MyMethod, null, 0, 100);}private void MyMethod(object obj){     /*DoSomething*/   //如果在timer里面需要更新UI控件的话,由于这个timer不是在主线程中执行的因此要这样访问:   this.Dispatcher.BeginInvoke(       new Action(       () =>       {           //这样更新UI       }));}
[解决办法]
期待问题的解答,可以用一下委托不
[解决办法]
我猜想你肯定是碰到了MessageBox.Show("maopian jijiang kaishi");在异步线程中会出异常的问题。给你个完整的吧
C# code
        private void Form1_Load(object sender, EventArgs e)        {            Run();        }        #region 每隔一段特定的时间执行一次:程序启动后在每隔10秒之后再次执行        private System.Threading.Timer tt = null;        public void Run()        {            if (tt == null)            {                tt = new System.Threading.Timer(executeRun, null, 5000, 10000);            }        }        public void executeRun(object obj)        {            this.BeginInvoke(new Action(() => { MessageBox.Show("maopian yijing bofang le" + DateTime.Now.ToString()); }));            //timer1.Start();        }        #endregion
[解决办法]
另一个版本,使用while...Sleep的方式
C# code
        private void Form1_Load(object sender, EventArgs e)        {            Action action = Run;            action.BeginInvoke(null, null);        }        #region 每隔一段特定的时间执行一次:程序启动后在每隔10秒之后再次执行        public void Run()        {            while (true)            {                executeRun();                Thread.Sleep(1000);            }        }        public void executeRun()        {            this.BeginInvoke(new Action(() => { MessageBox.Show("maopian yijing bofang le" + DateTime.Now.ToString()); }));        }        #endregion
[解决办法]
只要你是在this.BeginInvoke(new Action(() => {/*Dosomething*/ }));Dosomething那里更新主界面或者打开窗口的话,都没有问题的,不需再调用你以前的timer了喔,要不然就会有两个timer,所表达的意思就和你的本意完全不一样了。


如果你看不懂()=>的话,我再把那段代码给你分解一下。

C# code
 public void executeRun()        {            Action showInfoAction = ShowInfo;//Action是一个.net自己的委托,就是一个void、无参形式的委托            this.BeginInvoke(showInfoAction);        }        private void ShowInfo()        {            MessageBox.Show("maopian yijing bofang le" + DateTime.Now.ToString());        }
[解决办法]
让程序不要退出,hide起来,过一段时间再执行一次即可。。。谁说一定要按客户的,退出进程了?
[解决办法]
那你就添加一个Timer,设置Interval为10分钟,在Timer的事件中执行load不就行了

热点排行