C# 如何把事件添加到 系统中简单的说就是 比如系统自带的MouseMove事件
如题:我需要1.不通过Timer。(原因:我不可能为了做一个软件而使用Timer这么大的组件来达到事件轮询通知的功能太浪费系统资源了)2.不通过在自己的程序里的函数检查。...
如题:
我需要
1.不通过Timer。(原因:我不可能为了做一个软件而使用Timer这么大的组件来达到事件轮询通知的功能太浪费系统资源了)
2.不通过在自己的程序里的函数检查。(原因:我不可能去使用函数检查,因为这太浪费CPU了,我的软件的主循环每秒需要循环33次以上简单的说,就是几乎所有的代码都要在每一秒内走33遍,所以不允许,有一些,多余的性能损耗)
3.不能使用线程(道理如上,雷同)
3.我需要像系统的如鼠标的move事件一样由系统给我发消息,而非我自己程序通知,系统发送消息到事件处理函数后,我在事件处理函数内实现相应的功能。就这样。
请教
补充:
我就是想要实现:
比如:鼠标的一系列事件,都是由系统触发,right?yes
那么,也就是说从某种意义上来说,系统里面有一个类似timer的东西,或者一个线程之类的东西,在不断地检查事件是否被触发,right?yes
现在,我的要求就是把我的事件触发逻辑验证代码(检查函数),注册到系统的检查机制中去,而不是自己通过循环,或定时器实现。
MythYsJh 说得些道理,但还是不能解决我的问题啊。。。
另外,推荐的答案,不知是谁选的,真够水的。。。
期待高人出现
MythYsJh
if( ProcessCompleted != null )
{
ProcessCompleted(...);
}
这是个逻辑判断的过程,请问这个判断过程的代码,因该放在哪里呢? 展开
我需要
1.不通过Timer。(原因:我不可能为了做一个软件而使用Timer这么大的组件来达到事件轮询通知的功能太浪费系统资源了)
2.不通过在自己的程序里的函数检查。(原因:我不可能去使用函数检查,因为这太浪费CPU了,我的软件的主循环每秒需要循环33次以上简单的说,就是几乎所有的代码都要在每一秒内走33遍,所以不允许,有一些,多余的性能损耗)
3.不能使用线程(道理如上,雷同)
3.我需要像系统的如鼠标的move事件一样由系统给我发消息,而非我自己程序通知,系统发送消息到事件处理函数后,我在事件处理函数内实现相应的功能。就这样。
请教
补充:
我就是想要实现:
比如:鼠标的一系列事件,都是由系统触发,right?yes
那么,也就是说从某种意义上来说,系统里面有一个类似timer的东西,或者一个线程之类的东西,在不断地检查事件是否被触发,right?yes
现在,我的要求就是把我的事件触发逻辑验证代码(检查函数),注册到系统的检查机制中去,而不是自己通过循环,或定时器实现。
MythYsJh 说得些道理,但还是不能解决我的问题啊。。。
另外,推荐的答案,不知是谁选的,真够水的。。。
期待高人出现
MythYsJh
if( ProcessCompleted != null )
{
ProcessCompleted(...);
}
这是个逻辑判断的过程,请问这个判断过程的代码,因该放在哪里呢? 展开
5个回答
展开全部
mousemove这种事件是有东西去触发就会发生。它的逻辑有可能是当鼠标的坐标在某个区域内时,就触发事件:
if( mousemove )//鼠标划过
{
if( Mousemove != null )
{
Mousemove( ..);
}
}
其实就是一个简单的事件,比如自己在做业务逻辑处理时,需要在处理完毕通知使用这个业务逻辑的用户,就可以定义一个事件:
public event EventHandler ProcessCompleted;
当业务逻辑处理完毕时,触发这个事件:
//处理完毕,通知调用者
if( ProcessCompleted != null )
{
ProcessCompleted(...);
}
而在调用者那里,他可以注册这个事件以在处理完毕时得到通知
Biz.ProcessCompleted += MyMethod;
就是这么一个流程。但觉有点乱,希望你能看懂。。。
最初的UI控制权全在开发人员,也就是程序提醒用户输入,或者程序必须在条件满足时必须触发事件,后来这部分工作被移交给了UI框架,也就是你说的系统。在上面的例子中业务逻辑处理模块同样也就是你这个意义上的系统。WINFORM事件是如何触发的我不清楚,但在web程序里如点击事件并不是框架通过timer或新线程来一直轮训是不是触发了事件,而是通过回发页面,回发后系统会取得引起回发的控件的id,从而相应的执行为该控件定义的回发事件。不过我相信在winform里也不应该会通过timer或线程来判断事件是不是触发了。
放在你准备触发那个事件的地方
if( mousemove )//鼠标划过
{
if( Mousemove != null )
{
Mousemove( ..);
}
}
其实就是一个简单的事件,比如自己在做业务逻辑处理时,需要在处理完毕通知使用这个业务逻辑的用户,就可以定义一个事件:
public event EventHandler ProcessCompleted;
当业务逻辑处理完毕时,触发这个事件:
//处理完毕,通知调用者
if( ProcessCompleted != null )
{
ProcessCompleted(...);
}
而在调用者那里,他可以注册这个事件以在处理完毕时得到通知
Biz.ProcessCompleted += MyMethod;
就是这么一个流程。但觉有点乱,希望你能看懂。。。
最初的UI控制权全在开发人员,也就是程序提醒用户输入,或者程序必须在条件满足时必须触发事件,后来这部分工作被移交给了UI框架,也就是你说的系统。在上面的例子中业务逻辑处理模块同样也就是你这个意义上的系统。WINFORM事件是如何触发的我不清楚,但在web程序里如点击事件并不是框架通过timer或新线程来一直轮训是不是触发了事件,而是通过回发页面,回发后系统会取得引起回发的控件的id,从而相应的执行为该控件定义的回发事件。不过我相信在winform里也不应该会通过timer或线程来判断事件是不是触发了。
放在你准备触发那个事件的地方
2011-01-01
展开全部
你只要在事件中调用一下系统自带的类不就可以了,比如说异常类,很多是不需要自己亲自写的,你只要会调用,系统自动帮你处理了。----个人观点,不知道有没有帮助。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
描述不是很清楚。但是从你的描述看来,似乎你是想要一个Hook的功能:也就是鼠标全局钩子,让自己能捕捉到鼠标的所有动作。
这个可以通过安装鼠标钩子来完成。具体的上网搜下吧 :-)
这个可以通过安装鼠标钩子来完成。具体的上网搜下吧 :-)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
Graphics类可以画啊,配合你提到的鼠标事件,记录下坐标调用相应的方法就行了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
可能没有,我也不太确定。具体你想实现什么功能?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询