首 页 网络编程
网页制作 图形图象 操作系统 冲浪宝典
软件教学 认证考试

网络安全 网络办公 行业资讯 评测对比
您当前位置:站长天空 -> 冲浪宝典-> QQ专栏
c#多线程-不同线程之间通过事件委托封送调用方法 _c#应用
作者:网友供稿 点击:0
推荐
西部数码-全国虚拟主机10强!20余项虚拟主机管理功能,全国领先!第6代双线路虚拟主机,南北访问畅通无阻!可在线rar解压,自动数据恢复设置虚拟目录等.免费赠送访问统计,企业邮局.Cn域名注册10元/年,自助建站480元起,免费试用7天,满意再付款!P4主机租用799元/月.月付免压金
站内搜索
文章页数:[1] 

   前两天做了一个自定义单件Timer,该Timer能够根据相应数据记录(Row)中的记录ID和设定分钟Minutes 做相应的事件调用,但是如果此事件处理程序在一Form中时则不能正确调用它,但是把82到93行的注释去掉就可以了。

    Timer大体定义如下:


  1 using System;
  2 using System.Threading;
  3 using System.ComponentModel;
  4 using System.Windows.Forms;
  5
  6 /************************************************************
  7  * MyTimer.Timer能够根据同一Timer定时基准对不同的定时事件做定时。
  8  *
  9  * MyTimer.Timer包含一Hashtable和Threading.Timer,每次Timer定时回调
 10  * 遍历Hashtable并根据其中的TimerNode的定时周期值是否为零来判断是否调用
 11  * 相应的TimerCome事件。
 12  ************************************************************ */
 13 namespace MyTimer
 14 {
 15     /// <summary>
 16     /// 事件定时节点
 17     /// </summary>
 18     internal class TimerNode
 19     {
 20         /// <summary>
 21         /// 构造函数
 22         /// </summary>
 23         /// <param name="TimeCount">定时周期数</param>
 24         /// <param name="EvtID">事件ID</param>
 25         public TimerNode(long TimeCount,object EvtID)
 26         {
 27             this.mTimeCount=TimeCount;
 28             this.mEvtID=EvtID;
 29         }
 30         private long mTimeCount;
 31         private object mEvtID;
 32
 33         public long TimeCount
 34         {
 35             get{return mTimeCount;}
 36             set{mTimeCount=value;}
 37         }
 38         public object EvtID
 39         {
 40             get{return mEvtID;}
 41         }
 42     }
 43
 44     public class TimerEventArgs:EventArgs
 45     {
 46         private System.Collections.ArrayList mEvtIDs;
 47         public System.Collections.ArrayList EvtIDs
 48         {
 49             get{return mEvtIDs;}
 50         }
 51
 52         /// <summary>
 53         /// 构造
 54         /// </summary>
 55         /// <param name="EvtIDs">触发的事件ID列表</param>
 56         public TimerEventArgs(System.Collections.ArrayList EvtIDs):base()
 57         {
 58             this.mEvtIDs=EvtIDs;
 59         }
 60     }
 61
 62     public delegate void TimerEventHandler(TimerEventArgs e);
 63
 64     /// <summary>
 65     /// Timer 单件模式,不能实例化。
 66     /// </summary>
 67     public class Timer
 68     {
 69         /// <summary>
 70         /// 有节点定时到事件
 71         /// </summary>
 72         public static event TimerEventHandler TimeCome;
 73
 74         /// <summary>
 75         /// 唤醒TimeCome事件。
 76         /// </summary>
 77         /// <param name="e">此参数包含定时到事件列表</param>
 78         static void RaiseTimeCome(TimerEventArgs e)
 79         {
 80             if(TimeCome!=null)
 81             {
 82 //                if(TimeCome.Target is System.ComponentModel.ISynchronizeInvoke)
 83 //                {
 84 //                    System.ComponentModel.ISynchronizeInvoke aSynch=TimeCome.Target as System.ComponentModel.ISynchronizeInvoke;
 85 //                    if(aSynch.InvokeRequired)
 86 //                    {
 87 //                        object[] args=new object[1]{e};
 88 //                        aSynch.BeginInvoke(TimeCome,args);
 89 //                    }
 90 //                    else
 91 //                        TimeCome(e);
 92 //                }
 93 //                else
 94                     TimeCome(e);
 95             }
 96         }
 97         static readonly long mPeriod=1000*60;//定时间隔1分钟。
 98         static System.Threading.Timer mTimer;
 99         static Timer()
100         {
101             mTimer=new System.Threading.Timer(new TimerCallback(TimeArrive),null,Timeout.Infinite,mPeriod);
102         }
103
104         /// <summary>
105         /// 定时器开始运行
106         /// </summary>
107         public static void Run()
108         {
109             mTimer.Change(0,mPeriod);
110         }
111
112         /// <summary>
113         /// 定时器停止。
114         /// </summary>
115         public static void Stop()
116         {
117             mTimer.Change(Timeout.Infinite,mPeriod);
118         }
119
120         /// <summary>
121         /// 加入定时事件,如果此定时事件已存在则修改其定时周期。
122         /// </summary>
123         /// <param name="EvtID">事件ID</param>
124         /// <param name="TimeCount">周期数</param>
125         public static void Add(object EvtID,long TimeCount)
126         {
127             if(mTimerNodes.ContainsKey(EvtID))
128             {
129                 ((TimerNode)mTimerNodes[EvtID]).TimeCount=TimeCount;
130             }
131             else
132                 mTimerNodes.Add(EvtID,new TimerNode(TimeCount,EvtID));
133         }
134
135         /// <summary>
136         /// 移除此定时事件
137         /// </summary>
138         /// <param name="EvtID">事件ID</param>
139         public static void Remove(object EvtID)
140         {
141             if(mTimerNodes.ContainsKey(EvtID))
142                 mTimerNodes.Remove(EvtID);
143         }
144
145         /// <summary>
146         /// 此函数是基准定时器mTimer的回调函数,
147         /// 在此函数中将检查事件表,如期事件定时周期数已到则将其加入事件参数中
148         /// 并唤醒事件。
149         /// </summary>
150         /// <param name="state"></param>
151         static void TimeArrive(object state)
152         {
153             System.Collections.ArrayList EvtIDs=new System.Collections.ArrayList();
154             foreach(TimerNode aNode in mTimerNodes.Values)
155             {
156                 aNode.TimeCount--;
157                 if(aNode.TimeCount<=0)
158                 {
159                     EvtIDs.Add(aNode.EvtID);
160                 }
161             }
162             if(EvtIDs.Count>0)
163             {
164                 for(int i=0;i<EvtIDs.Count;i++)
165                 {
166                     mTimerNodes.Remove(EvtIDs[i]);
167                 }
168                 RaiseTimeCome(new TimerEventArgs(EvtIDs));
169             }
170         }
171
172         /// <summary>
173         /// 事件表
174         /// </summary>
175         static System.Collections.Hashtable mTimerNodes=new System.Collections.Hashtable();
176     }
177
178
179 }
180

http://zxt1225.cnblogs.com/archive/2006/07/07/445444.html


文章整理:站长天空 网址:http://www.z6688.com/
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

文章页数:[1] 


放大字体显示 缩小字体显示 打印文章 推荐给朋友
热门文章
·qq宠物领养成长完全手则
·用C#读写ini文件-.NET教程,C#语言
·jsp生成xml文件示例-JSP教程,Jsp/Servlet
·检查IP地址的正则表达式-JSP教程,资料/其它
·关于免费申请6位qq的真相
·教你一招免费获得qq秀合影的方法
·用qq进行多人视频聊天绝招
·为DataGrid添加确认删除的对话框-.NET教程,数据库应用
·漫谈Java程序设计中的接口应用-JSP教程,Java技巧及代码
·java做的比较完善的FTP连接上传下载文件-JSP教程,Java技巧及代码
最新文章
·准确识别qq盗号陷阱的方法_qq安全
·解决qq无法接收显示自定义表情的问题_qq技巧
·个人网站定位、盈利的思考_网赚技巧
·photoshop照片合成:简单九步做雪地马群_photoshop教程
·qq2007中简单设置 让你的qq彻底隐藏_qq技巧
·qq2007 beta4发布 qq表情等功能改进_qq技巧
·google adsense建议与技巧_网赚技巧
·美女站长kelly—我的站,就是我的家_站长访谈
·防止qq密码被盗的十项技巧_qq安全
·网站投资你和我的20个自身检查(1)_站长心得
相关主题
  • C#多线程共享数据-.NET教程,C#语言
  • C#多线程笔记(一)-.NET教程,C#语言
  • 西部数码虚拟主机

    友情链接
    CNNIC 西部数码
    万网 自助建站
    虚拟主机 asp空间
    域名注册 域名
    域名申请 主页空间
    论坛空间 网站空间
    国际域名 虚拟空间
    空间租用 DDOS防火墙
    成都主机托管 四川主机托管
    主机租用 服务器租用
    网站目录 自助建站
    虚拟主机 网址大全
    软件下载
    自助链接
    虚拟主机资讯 特价虚拟主机
    版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!
    关于我们:站长天空:专业提供最新的站长资讯、在线教程、虚拟主机权威评测、虚拟主机性能对比、网站制作教程,开发教程,站长工具。包括网页制作教程、冲浪宝典、编程参考、操作系统、软件教学、行业动态等。
    特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。
    发表评论 打印  刷新     关闭