哎呀哎呀哎呀~,我爱上了事件
左直拳
事件对我来说很神秘,不容易理解和掌握。
可是慢慢的用了几次后,认为很好用。我发觉我已经喜欢上它了。
让我们立即开始这段感情吧。
一、为什么要用事件?
第一个反应当然是想获得一个通知。就是说,我希望某个东西执行到某个步骤,就通知我,我好做点什么事情;最初VC里的事件给我的印象就是这样子的。当然C#里也有这样的功能。
第二个,预留一个空间让调用方来执行自己的东西。我目前做得最多的就是在写用户控件的时候,提供事件来让调用这些控件的程序在事件激发时处理自己特定的代码,这些代码是怎么样的,对控件本身来说完全不知情。
二、如何使用事件?
(一)ASP.NET应用
结合写控件来说明。
在用户控件里:
1、先声明一个委托
public delegate void ClickEventHandler(object sender, EventArgs e);
在C#里,事件本质是一个委托。委托的作用是可以将函数或方法当作参数来使用。
2、再用这个委托声明一个事件E
public event ClickEventHandler MyClick;
3、然后在控件本身的事件中(例如某个按扭被点击)检查事件E是否有被引用,有就执行
protected void btnTest_Click(object sender, EventArgs e)
{
……
if (MyClick != null) MyClick(this, e);
}
这个执行,就是触发调用方的代码。
4、在调用方
页面代码:
<uc4:myCtrl ID="MyCtrl1" runat="server" OnMyClick="MyCtrl1_MyClick" />
注意这里是OnMyClick,多了一个”On”。
服务器代码:
protected void MyCtrl1_MyClick(object sender, EventArgs e)
{
//HELLO WORLD!
}
(二)WINFORM等常规程序应用
我搞了个东西使用了多线程,现在想所有的线程都执行完了以后,返回一个消息,好作些抹屁股的工作。
用事件。
public class PThreadInvoke
{
public PThreadInvoke()
{
……
//加入事件
CThreadDo.ThreadFinished += new CThreadDo.FinishEventHandler(CThreadDo_ThreadFinished);
}
//调用该事件的函数
void CThreadDo_ThreadFinished()
{
//HELLO WORLD
}
//类中类
class CThreadDo
{
public delegate void FinishEventHandler();
public static event FinishEventHandler ThreadFinished;
//所有线程执行完
public void ThreadIsOver()
{
……
//触发事件
if ( ThreadFinished != null)
{
ThreadFinished();
}
}
经过测试,事件跟全局静态变量差不多,比如说,就本例子来讲,这个线程不管是用户手工激发,还是用定时器每隔一段时间激发,都能收到ThreadFinish事件。比方说,这个程序一直在后台运行,定时器激发了线程;然后用户打开了界面,很显然,用户使用的实例PThreadInvoke 和定时器使用的PThreadInvoke 并非同一个,可是定时器开辟的线程完成之后,触发的ThreadFinished 事件,在用户使用的实例PThreadInvoke 里同样能收到。只要 if ( ThreadFinished != null) 都可以。
总结:
事件本质是一个委托。由调用方引用(+=),由被调用方触发。
好多东西我都没搞懂,写出来也不知道对不对。谨作总结备忘。
分享到:
相关推荐
Label1.Caption = "哎呀,我早知道了!" ElseIf answer = "不爱" Then Label1.Caption = "哈哈,你在开玩笑吧?" Else Label1.Caption = "这个问题,你得好好想想哦!" End If End Sub End Class ``` 在这段...
如“爱你不需要开花结果,只要你开心我的付出就变得有意义”,这句话传达了无私的爱意,表达了对对方幸福的重视胜于一切。 2. **祝福语**: 多条短信中都包含了对有情人的祝福,如“希望天下有情人终成眷属”和“愿...
哎呀,自己做过课件。 自己做的, HTML的标签,历史,格式
帕塞| 荷兰文|哎呀,这是阿尔维·比纳·帕森(Alweer bijna Pasen),请给我们!“复活节彩蛋” zijn een bekend begrip binnen软件城。... 雷格尔斯你好,我的爱是安茹。 Wel zijn er enkele regels m
帕塞 | 荷兰文| 哎呀,这是阿尔维·比纳·帕森(Alweer bijna Pasen),请给我们! “复活节彩蛋” zijn een bekend begrip binnen软件城。 在hun productiecode ...你好,我的爱是安茹。 Wel zijn er enkele regels m
哎呀 主要是拖延症晚期患者 真的很烦啊 也不全是拖延问题 因为个人表达水平有限 真心不会按照大纲那样笼统的去讲解 文采坑的要命 (也就调戏妹子思路广点) 所以 我需要你们的帮助 我希望你们能把平时开发过程中遇到...
3. 梓辛学校的"哎呀哎呀"舞蹈,由朱爱华指导,舞蹈可能融合了孩子们的日常生活元素,生动有趣。 4. 小白兔幼儿园的"歌声与微笑"舞蹈,以音乐和舞蹈的形式传播快乐,让孩子们在歌声中找到快乐的源泉。 5. 才英幼儿园...
5. 故事的引子、开端、发展、高潮、结局分别是E、“织”新装──现手段、A、看新装──恐失职、C、爱新装──显癖好、D、展新装──揭真相、B、穿新装──露愚心。 6. 悲观者和乐观者的对话: - 悲观者:“这里的...
27. **反思与坚韧**:“哎呀妈呀,真不知道该说自己倔强还是好强,,怎么到这种地步了还在强忍着???”,这反映出90后在反思自己倔强性格的同时,仍保持着坚韧。 28. **爱情的让步**:“倔强的我看着你和她幸福的走...
1. **哎呀叫啊嘛呀**:表示惊讶或感叹的口头语。 2. **八卦叫老孔雀**:形容人爱管闲事,爱打听他人隐私。 3. **霸道跋扈叫大B拽拽**:形容人行为嚣张,不可一世。 4. **白食叫喝皮**:免费得到的东西,不劳而获。 5...
- 课程鼓励学生找出并理解叙利奥的心理变化,如“哎呀,不能说,还是一直瞒下去,帮爸爸做事吧。”这句话体现了叙利奥的决心和忍耐。 - 学生们被要求用通顺、流畅的语言表达自己的感受,以及有感情地朗读感动的情景...
6. **身份认同**:“我爸是里剛”这样的网名可能暗示着家族背景或对某种社会角色的认同,而“便利贴男人”则可能表示用户愿意为他人提供帮助。 7. **网络社交**:在社交网络中,选择一个有意义的网名可以吸引他人的...
快递公司包裹快递客户 '醒来的士兵,我们有包裹要运送' 〜康斯坦丁新安德森 提示史诗简介音乐 ...哎呀,告诉我如何运行应用程序 好吧,好吧,抱着你的马pardner,让我们冷静下来,键入npm start 而已? 一个
哎呀 主要是拖延症晚期患者 真的很烦啊 也不全是拖延问题 因为个人表达水平有限 真心不会按照大纲那样笼统的去讲解 文采坑的要命 (也就调戏妹子思路广点) 所以 我需要你们的帮助 我希望你们能把平时开发过程中遇到...
* 围棋儿歌〔一〕:小朋友,学围棋,爱围棋上课、训练守纪律身子正,手背起,发言讲话把手举动脑筋,靠自己,文明下棋多神气围棋儿歌〔一〕 * 围棋儿歌〔二〕:小朋友、多宣传大家都来学围棋功课抓紧成绩好课余学棋...
2. **清晰的信息**:404页面应明确告诉用户发生了什么错误,并提供简单易懂的错误信息,如“哎呀!你好像迷路了...”。 3. **导航链接**:为了帮助用户找到正确的路径,404页面应该包含网站的主要导航链接或者首页...
动词的种类繁多,如表示动作的"走"、"看",表示存在的"在"、"有",表示心理活动的"爱"、"恨",表示判断的"是"、"正是",以及助动词和趋向动词等。 3. **形容词**:形容词用于描述人或事物的性质、形状、状态。例如...
例如“走”(表动作)、“在”(表存在)、“爱”(表心理活动)、“是”(表判断)。动词的用法复杂,比如动词“是”除了表示主语等于或属于什么,还可以用在动词或形容词前加强肯定语气。而动词“有”只能作动词,...
在词语中,"ai" 常常表示 "爱" 或者 "挨" 的意思,例如 "爱心"、"挨近"。 2. "ei" 复韵母:"ei" 由 "e" 和 "i" 组成,发音时先发 "e" 的音,紧接着发 "i" 的音,发音类似英文的 "ay"。在词汇中,"ei" 有 "哎" 的...