首页 / C# / c# – .NET的事件机制
c# – .NET的事件机制
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – .NET的事件机制,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2609字,纯文字阅读大概需要4分钟。
内容图文
在我所见到的关于C#/ .NET的所有书籍中,当他们谈论事件时,
他们谈论创造和消费事件.
我很想知道它在我们的代码背后是如何工作的 – 运行它的机制是什么.
我对Windows消息循环对于引发的事件的队列行为有点了解.
例如,WM_KEYDOWN,或WM_LBUTTONDOWN等.
但是例如,如果我创建一个不继承类Control的类,并且这个类引发一个事件会发生什么?
(另一个类,也没有继承类Control,接收它)
引发事件是否会通过消息循环?
听起来不那么逻辑……
(但假设该项目是一个Windows窗体项目,只有两个类 – 发送者和接收者根本不是GUI类,而是你写的简单类)
任何有关我们代码背后机制的文章的解释或链接都将受到高度赞赏.
解决方法:
我希望我能正确理解你的问题.我想我们谈的是两件事.
首先 – C#中的事件如何工作
第二 – 用C#编写的WinForms应用程序如何知道您何时单击按钮.
C#中的事件是他们自己独特的事情.你可以编写一个控制台应用程序,创建自己的事件,听取它,激活它,响应它等等……这一切都可行.您通过调用Add()订阅事件,并通过调用Remove()取消订阅.事件本身会跟踪正在监听它的方法以及何时引发它们,调用所有这些方法.
Jon Skeet解释得更好:
How do C# Events work behind the scenes?
但这些事件只是C#代码.与您提到的Win32消息相关但不同.在Winforms应用程序中,当用户单击按钮时,应用程序如何知道它?我们可以使用调试器(关闭’我的代码’https://msdn.microsoft.com/en-us/library/dn457346.aspx选项)并在点击事件中设置断点,你将能够看到发生了什么.
所以在Windows.Forms.Controls.ControlNativeWindow中有一个WndProc方法,它接受System.Windows.Forms.Message m.
就在此之前是’debuggableCallback’方法.这反映了您对Win32API应用程序的期望.
/// <include file='doc\NativeWindow.uex' path='docs/doc[@for="NativeWindow.DebuggableCallback"]/*' />
/// <devdoc>
/// Window message callback method. Control arrives here when a window
/// message is sent to this Window. This method packages the window message
/// in a Message object and invokes the wndProc() method. A WM_NCDESTROY
/// message automatically causes the releaseHandle() method to be called.
/// </devdoc>
/// <internalonly/>
private IntPtr DebuggableCallback(IntPtr hWnd, int msg, IntPtr wparam, IntPtr lparam) {
// Note: if you change this code be sure to change the
// corresponding code in Callback above!
Message m = Message.Create(hWnd, msg, wparam, lparam);
try {
if (weakThisPtr.IsAlive && weakThisPtr.Target != null) {
WndProc(ref m);
}
else {
DefWndProc(ref m);
}
}
finally {
if (msg == NativeMethods.WM_NCDESTROY) ReleaseHandle(false);
if (msg == NativeMethods.WM_UIUNSUBCLASS) ReleaseHandle(true);
}
return m.Result;
}
因此,最终,如果您在Windows上运行,它会受到您期望的相同Win32 API消息的驱动.只是编写System.Windows.Forms类来封装大部分类.
内容总结
以上是互联网集市为您收集整理的c# – .NET的事件机制全部内容,希望文章能够帮你解决c# – .NET的事件机制所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。