一、多线程实时监控控件
一、前言
对于多线程实时监控控件,其实现原理无外乎另开一个线程每隔一定时间进行实时监控。大多是使用
Timer控件,而system.windows.forms.timer则是主线程执行的,故不能实现。
二、.NET提三种记时器
1,System.Timers.Timer:
这个Timer是使用线程池中的线程去执行任务的,可以指定线程池中的某个线程去执行任务。
基于服务器的计时器是为在多线程环境下与辅助线程一起使用而设计的。由于它们使用不同的体系
结构,因此基于服务器的计时器可能比Windows 计时器精确得多。服务器计时器可以在线程之间移动来
处理引发的事件。
2,System.Threading.Timer:
和1中的Timer类似也是使用线程池中的线程去执行任务的,但是不可以指定线程池中的某个线程去
执行任务。
特点:使用imerCallback委托指定希望Timer执行的方法。此方法不在创建计时器的线程中执行,
而是在系统提供的线程池线程中执行。
3,System.Windows.Forms.Timer:
该Timer的特点是执行任务的线程是专属于任务相关窗口的。决不能用这个Timer执行时间太长(例
如几分之一秒)的任务,否则会造成界面无响应。
特点:计时器是为单线程环境设计的,其中,UI线程用于执行处理。Windows 计时器的精度限定
为55毫秒。这些传统计时器要求用户代码有一个可用的 UI 消息泵,而且总是在同一个线程中操作,或
者将调用封送到另一个线程。
三、实现
使用System.Threading.Timer,另开线程进行控制。如下:下面代码功能为,实现紧急案件的实时
检测,并发现案件是,提醒处理,其中包括提醒处理等操作均不影响主线程的运行,这是要达到的目标
。
private EnumDoingFlag m_EnumDoingFlag = EnumDoingFlag.EnumDoingFlagNone;
private System.Threading.Timer m_Timer;
public void StartMonitor()
{
System.Threading.TimerCallback pTimerCallback = new
System.Threading.TimerCallback(m_Timer_OnTickerEvent);
m_Timer = new System.Threading.Timer(pTimerCallback, null, m_DueTime,
m_Interval);
m_EnumDoingFlag = EnumDoingFlag.EnumDoingFlagDoing;
}
public void StopMonitor()
{
m_Timer.Dispose();
m_EnumDoingFlag = EnumDoingFlag.EnumDoingFlagNone;
this.m_dictEvent.Clear();
}
private IDictionary<string, bool> m_dictEvent = new Dictionary<string, bool>();//案
件ID,是否已经提醒
private void m_Timer_OnTickerEvent(object obj)
{
try
{
Event[] arrayEvent = this.m_Services.getExigence
(JinpengGIS.UserClass.UserInfo.userId, "" , "", "");
if (arrayEvent == null || (arrayEvent.Length == 1 && arrayEvent[0] ==
null))
return;
IList<Event> listEvent = new List<Event>();
for (int i = 0; i < arrayEvent.Length; i++)
{
if (this.m_dictEvent.ContainsKey(arrayEvent[i].eventId) &&
this.m_dictEvent[arrayEvent[i].eventId] == true)
continue;
else
{
listEvent.Add(arrayEvent[i]);
this.m_dictEvent[arrayEvent[i].eventId] = true;
}
}
Event[] arrayEvent2 = new Event[listEvent.Count];
listEvent.CopyTo(arrayEvent2, 0);
if (listEvent.Count != 0)
this.ThreadAssitant(arrayEvent2);
}
catch
{
return;
}
}
private delegate void ThreadAssitantHandler(Event[] events);
private void ThreadAssitant(Event[] events)
{
if (this.InvokeRequired)
{
ThreadAssitantHandler pThreadAssitantHandler = new ThreadAssitantHandler
(this.ThreadAssitant);
this.Invoke(pThreadAssitantHandler, new object[] { events });
}
else
{
TaskbarNotifierMonitorHelper pTaskbarNotifierMonitorHelper = new
TaskbarNotifierMonitorHelper();
pTaskbarNotifierMonitorHelper.TaskbarNotifierMonitor.ListBox.MouseDoubleClick += new
MouseEventHandler(ListBox_MouseDoubleClick);
pTaskbarNotifierMonitorHelper.TaskbarNotifierMonitor.EventbtnOk_Click +=
new EventHandler(TaskbarNotifierMonitor_EventbtnOk_Click);
pTaskbarNotifierMonitorHelper.ShowNotifier("紧急案件", "请尽快处理", 0,
events);
}
}
四、注意事项
(1)对于多线程实时监控控件MonitorService必须继承与基类Form,而不能继承与Control或
UserControl。因为如果继承至Control或UserControl则只有在添加到Form且Show后在可用,否则无法刷
新。
(2)为例在使用代码实例化时能够实现触发的刷新,需要在构造函数中先把控件显示再隐藏,做如下
处理。
//解决刷新问题
base.Width = 1;
base.Height = 1;
base.WindowState = FormWindowState.Minimized;
base.ShowInTaskbar = false;
base.Show();
base.Hide();
五、总结
对于多线程实时监控的控件实现原理大抵如此,变换可实现不同的应用。
二、
C#中构建多线程应用程序(1)
http://blog.csdn.net/todototry/article/details/5026787
分享到:
相关推荐
java多线程相关资料整理
多线程参考资料
C#多线程资料集合:包括编程实例实战,线程技术,多线程的相关概念,ASP.Net多线程编程等内容。是学习C#线程编程技术的良师益友!
多线程的学习资料(对初学者特别有用)!里面详细讲了有关线程池、以及相关的疑难杂症的相应解答。。。
多线程(线程池)的相关研究资料 内附几篇经典的研究论文对相关算法的研究
多线程入门,分布式锁,等相关资料,全方位,欢迎下载!
主要从IBM开发者网站上整理的关于POSIX多线程相关资料,但是资料有些比较老,仅作参考,如若想实际编程还需参考系统的手册。希望对大家学习有帮助!
资源名称:Java多线程并发相关资料汇总 资源目录: 【】JavaConcurrencyinPractice 【】JavaThreads(3rdEdition) 【】JAVA多线程并发 【】Java多线程并发访问解决方案 【】java多...
这是一个有关多线程的网页-C#_net同步异步SOCKET通讯和多线程总结
Java面试资料之多线程相关
该资源主要是对多线程相关概念以及主要方法做了讲解,对多线程的相关知识架构有相对清晰的解释,有需要的小伙伴下载学习使用!
vc++多线程实例、线程池原理及实例相关资料汇总大全
Java多线程应用源代码及相关说明资料,适合学习后端Java多线程相关的练习
这是在网上找得不错的资料,详细介绍了多线程的相关概念。有时用用多线程,能提高运行效率。文章里并就C#里面的Thread类进行了详解。对进程、线程比较模糊的初级程序员可以下来看看,还是很有帮助的。">提到多线程...
多线程以及socket编程的相关 主要讲解多线程以及socket
内容 包括一些详细解说的文本 还有例子 包括pdf文件 都可以看
车牌号码识别 多线程实现 线程数量从1~6 源代码 源代码能直接在vs2008中运行,与该项目有关文档资料,请自行在我的资源中寻找下载
传智播客下载的有关java多线程的资料,感觉不错,值的借鉴。
好东西 讲解VC多线程编程的 还附带定时器相关资料