事件的简单问题

zjj1211 2010-07-29 11:15:48
最近学委托和事件,有个东西我就不明白了,就是我自己定义了一个事件,

class progrom
{
delegate void DL();
event DL sj;
static void Main(string[] args)
{
progrom pp = new progrom();
pp.sj += new DL(Print);
pp.sj();
}
static void Print()
{
Console.WriteLine("P");
}
}

看, 我想触发事件,我调用它就行了。是吧,在winform程序中,当我点击了一个按钮,按钮的oncleck事件就会被触发。
这是为什么呢?这个oncleck事件是谁把它调起来的呢?

我是这样看的,前辈们帮我审审看对不对?
因为老师老让做控制台应用程序,我做的一个秒表,按空格就暂停了,我就弄了一个死循环,一直判断是否输入了空格,if
(按了空格){执行一个方法,让秒表挺下来};我想c#的后台是不是也这么做的,用一个循环一直监听鼠标键盘等外设的动作
一旦满足了条件就执行事件。 不知道我的猜测对不对?如果是对的那具体过程是怎样的?

分数不多了,前辈们不要见怪啊
...全文
98 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjj1211 2010-07-30
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 sp1234 的回复:]

且不管你的死循环是否是可取的东西,仅说事件部分:

设计秒表程序时,设计者知道自己的客户都要干什么吗?当然不知道。所以它抛出 public event DL sj; 事件,让一个或者多个客户分别得到通知。

而不是像你那样根本没有必要事件(用普通的方法就好)的时候去事件。
[/Quote]您没明白我意思。是我表达的不清楚。就先不说那个,现在这样我点击了一个butten,那这个点击事件为什么就执行了?是不是有个什么东西去调用了他?我把事件理解为一个特殊的方法您同意吗?
iammac 2010-07-30
  • 打赏
  • 举报
回复
举个例子

static void Main(string[] args)
{
MyThread myThread = new MyThread();
Thread th = new Thread(myThread.Start);

myThread.StopThread += delegate
{
th.Abort();
};
th.Start();
}

}

public class MyThread
{
public delegate void StopThreadHandler(object sender);
public StopThreadHandler StopThread;

public void Start()
{
ConsoleKeyInfo key;
while (true)
{
key = Console.ReadKey();
if (key.KeyChar == ' ')
if (StopThread != null)
StopThread(this);
}
}
}

监测到空格就推出
lanhaide 2010-07-30
  • 打赏
  • 举报
回复
说白一点,C#中的委托和事件类似于C中的函数指针,都是函数定义的入口地址表示。至于像按钮的CLICK事件的触发的底层,我们也没有必要知道,也没办法知道(除非微软把.NET开源)。只要记住当我们Click一个按钮的时候,系统会把一个函数指针指向我们之前定义好的委托,并执行这个函数。
friedDuck 2010-07-30
  • 打赏
  • 举报
回复
lz的意思是不是想问
this.button1.Click += new System.EventHandler(this.button1_Click);

这里的this.button1.Click是由什么东西触发?在哪里定义的?

我也很好奇,同问。
zjj1211 2010-07-30
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 friedduck 的回复:]
lz的意思是不是想问
this.button1.Click += new System.EventHandler(this.button1_Click);

这里的this.button1.Click是由什么东西触发?在哪里定义的?

我也很好奇,同问。
[/Quote]对的~知己啊! 怎么联系?
zjj1211 2010-07-30
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 lanhaide 的回复:]
说白一点,C#中的委托和事件类似于C中的函数指针,都是函数定义的入口地址表示。至于像按钮的CLICK事件的触发的底层,我们也没有必要知道,也没办法知道(除非微软把.NET开源)。只要记住当我们Click一个按钮的时候,系统会把一个函数指针指向我们之前定义好的委托,并执行这个函数。
[/Quote]
恩~我看C++里面有个消息监控的东西,想自动C#是不是也有
  • 打赏
  • 举报
回复
鼠标键盘也是如此。你编写的程序处理form的keydown事件,而不是像你那样仅仅在定义事件的类里边自己调用自己玩。
  • 打赏
  • 举报
回复
且不管你的死循环是否是可取的东西,仅说事件部分:

设计秒表程序时,设计者知道自己的客户都要干什么吗?当然不知道。所以它抛出 public event DL sj; 事件,让一个或者多个客户分别得到通知。

而不是像你那样根本没有必要事件(用普通的方法就好)的时候去事件。

111,120

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧