首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 初学C#,请教一些问题 [已结贴,结贴人:fj182]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-03 10:18:52 楼主
    我做了一个Console应用程序,程序运行后定期做一些事情,我是这么写的:
    C# code
    class Application { public void Run() { int intQueryInterval = Properties.Settings.Default.QueryInterval; DateTime dteLastCheck = DateTime.Now; while (true) { TimeSpan t = DateTime.Now - dteLastCheck; if (t.Seconds > intQueryInterval) { DoSth(); dteLastCheck = DateTime.Now; } System.Threading.Thread.Sleep(1); } } private void DoSth() { //... } }


    我想知道这种做法有没有问题?
    100  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-03 10:20:561楼 得分:5
    这个应该只会运行一次吧,不会定期执行的。

    如果要定期执行,可以用Timer控件来实现,或者Threading命名空间下的Timer。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-03 10:21:062楼 得分:0
    借宝地同请教类似问题,大家帮帮忙啊!~~

    http://topic.csdn.net/u/20080702/22/352ad5a0-bbd1-4c8f-bfa7-cbcce0a67658.html?seed=1678273306
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-03 10:21:483楼 得分:5
    如果没什么特殊要求,也可以啦。
    t.Seconds改成t.TotalSeconds
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • cftea
    • 等级:
    发表于:2008-07-03 10:22:304楼 得分:5
    为什么不用 Timer 呢?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-03 10:24:055楼 得分:0
    我之前用的是Timer,后来发现用Timer就不只一个线程了,我对多线程一窍不通。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-03 10:31:596楼 得分:0
    没有main方法作为入口,该程序可以执行吗?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • yagebu1983
    • 等级:
    发表于:2008-07-03 10:33:057楼 得分:5
    应该没问题!!!
    感觉用线程比较好!!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-03 10:41:068楼 得分:5
    Timer没有问题的,或者就是用多线程
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • hopewoo
    • 等级:
    发表于:2008-07-03 10:47:529楼 得分:5
    System.Threading.Thread.Sleep(1);
    为了什么?
    如果一定要要System.Threading.Thread.Sleep(1)的话,不如System.Threading.Thread.Sleep(0);这样系统能自动给你分配CPU资源。

    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-03 11:10:2010楼 得分:0
    用Sleep(1)的原因是不会让程序占用CPU太高,要是Sleep(0)的话CPU占用始终都是100%.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-03 11:25:4911楼 得分:5
    这个是我做的,你可以参考一下
    C# code
    private System.Threading.Thread aaa; private void Run() { aaa = new System.Threading.Thread(Process_start); aaa.Start(); } private void Process_start() { while (true) { DoSth(); System.Threading.Thread.Sleep(10000); } }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-03 11:27:4912楼 得分:5
    建议用: Timer
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-03 11:40:3713楼 得分:0
    请大家给我一个好的方案,谢谢。逻辑如下:
    一Console应用程序,启动后每隔一段时间调用某个方法,主线程始终保持运行,除非用户手工关闭控制台窗口。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • ojlovecd
    • 等级:
    发表于:2008-07-03 12:01:2514楼 得分:5
    C# code
    namespace Test { class Program { private static void Main(string[] args) { System.Timers.Timer timer = new System.Timers.Timer(); timer.Interval = 1000; timer.Elapsed += new EventHandler(timer_Elapsed); timer.Enabled = true; } private void timer_Elapsed(object sender , EventArgs e) { //do something } } }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-03 12:06:5415楼 得分:5
    很标准的一个线程用例.

    Thread th= new Thread(new ThreadStart(Run)); 
    th.Start();
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-03 12:11:4116楼 得分:5
    推荐Threading
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-03 12:16:3617楼 得分:0
    谢谢 ojlovecd 的帮助,我起初就是用这种方法,可是程序运行后控制台窗口一闪就关掉了。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-03 12:20:4818楼 得分:5
    引用 14 楼 ojlovecd 的回复:
    C# code
    namespace Test
    {
        class Program
        {
            private static void Main(string[] args)
            {
                System.Timers.Timer timer = new System.Timers.Timer();
                timer.Interval = 1000;
                timer.Elapsed += new EventHandler(timer_Elapsed);
                timer.Enabled = true;
            }
            private void timer_Elapsed(object sender , EventArgs e)




    接分顶贴!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • ojlovecd
    • 等级:
    发表于:2008-07-03 12:22:0519楼 得分:0
    引用 17 楼 fj182 的回复:
    谢谢 ojlovecd 的帮助,我起初就是用这种方法,可是程序运行后控制台窗口一闪就关掉了。


    在你的Main最后一个Console.Read();
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • samql
    • 等级:
    发表于:2008-07-03 12:30:0320楼 得分:0
    问题解决,接分..
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-03 12:32:0821楼 得分:0
    我希望程序运行时不让用户干预,除非强制结束程序。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-03 12:35:1722楼 得分:0
    传说中回帖就给分
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • ojlovecd
    • 等级:
    发表于:2008-07-03 12:36:3923楼 得分:30
    引用 21 楼 fj182 的回复:
    我希望程序运行时不让用户干预,除非强制结束程序。

    能说的具体一点吗?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-03 12:42:4424楼 得分:0
    就是说我做的程序不需要让用户去控制。用 Console.Read()的话用户一不小心就会把程序结束掉。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-03 12:46:2425楼 得分:0
    再顶...
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-03 12:46:4426楼 得分:5
    你这个其实就可以达到你的要求啦。只不过要改正那个小错误
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • ojlovecd
    • 等级:
    发表于:2008-07-03 12:49:2327楼 得分:0
    这样行不行:
    while(true)
    {
        Console.Read();
    }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-03 13:06:2928楼 得分:0
    多看书 多学习。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-03 13:38:1329楼 得分:5
    while(true)
    {
        Console.Read();
    }

    加个这个,在调试时就要=你按下相应的键才会关了.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-03 13:58:5230楼 得分:0
    只是过来拿分的!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-03 15:49:5431楼 得分:0
    顶一下~
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-03 15:51:5332楼 得分:0
    多谢各位的帮助,结帖。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-03 15:58:3233楼 得分:0
    引用 27 楼 ojlovecd 的回复:
    这样行不行:
    while(true)
    {
        Console.Read();
    }


    正解
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved