Tag: 事件处理

将盒装对象转换回原始类型

我希望有两个答案中的一个,要么不可能,要么非常简单,我忽略了明显的Google查询。 潜在的问题是我有一个通用对象通过EventHandler传入,它装入对象并模糊真实类型; 只有在运行时我才知道对象是什么。 不可否认, dynamic关键字可以解决这个问题,但我想不要失去智能感知,如果我可以避免它。 另外,它没有解决不知道通用对象的每个属性没有大量reflection的情况。 编辑:我们的想法是能够确定方法参数中对象的真实类型,然后在不事先知道的情况下将该对象转换为真实类型。 这只是一个简化的例子。 盒装可能是错误的术语。 一个例子: public class Program { static void Main(string[] args) { var container = new Container( new Containee { Property1 = Guid.NewGuid(), Property2 = “I’m a property!”, Property3 = DateTime.Now } ); var boxed = (object)container; var originalType = boxed.GetType(); // DOES NOT COMPILE: would like an […]

如何在运行时克隆控件事件处理程序?

我想复制一个像Button,TextBox等控件。但我不知道如何将事件处理程序方法(如Click )复制到新控件。 我现在有以下代码: var btn2 = new Button(); btn2.Text = btn1.Text; btn2.size = btn1.size; // … btn2.Click ??? btn1.Click 有没有其他方法来复制控件?

委托类型和事件处理程序类型有什么区别?

三个相关的习语:事件,委托,事件处理程序。 我总是对谁被“添加”给谁感到困惑。 event += handler event += delegate handler += delegate 据我所知: delegate:指向具有已知签名的函数的指针。 event-handler:注册到事件的委托。 基本上,它是否与代表相同? event:使用event()调用事件时执行的委托\事件处理程序列表 令我困惑的是MSDN中的这个签名: public delegate void EventHandler(Object sender, EventArgs e)

这是在C#中没有空检查的情况下触发/调用事件的更好方法吗?

我见过的大多数代码使用以下方式来声明和调用事件触发: public class MyExample { public event Action MyEvent; // could be an event EventHandler, too private void OnMyEvent() { var handler = this.MyEvent; // copy before access (to aviod race cond.) if (handler != null) { handler(); } } public void DoSomeThingsAndFireEvent() { // … doing some things here OnMyEvent(); } } 甚至ReSharper也会按照上面提到的方式生成一个调用方法。 为什么不这样做: […]

寻找域事件的示例

有没有人知道在哪里可以找到域事件实现的示例代码,如Udi Dahan在Domain Events – Salvation中所描述的那样?

事件处理程序性能

我有性能问题。 我创建了100个新按钮,我想分配一个Click事件处理程序。 我执行此代码大约100次: Buttons[i].Button.Click += new System.EventHandler(Button_Click); 完成大约需要2秒。 我在同一个函数中有很多其他事件赋值,但它们只需要几毫秒来执行。 所以我已经改变了我的代码 Buttons[i].Button.MouseUp += new System.Windows.Forms.MouseEventHandler(Button_Click); 现在代码很快(几毫秒,就像其他代码一样)。 显然,我修改了函数“Button_click”的参数以适应新的事件要求,但没有进行其他更改。 我想知道为什么会发生这种情况。 EventHandler会慢吗? 或者我做错了什么? 还是有最好的做法? 我在C#中使用VC2010,在Windows窗体应用程序中使用.NET 4。 编辑: 现在我已经“缩小”了我的代码并将其放在那里: Stopwatch stopWatch = new Stopwatch(); stopWatch.Start(); Button b; for(n=0;n<100;n++) { b = new Button(); b.Location = new System.Drawing.Point(100, 0); b.Name = "btnGrid"; b.Size = new System.Drawing.Size(50, 50); b.Text = b.Name; b.UseVisualStyleBackColor […]

C#用户控件按钮单击事件处理程序从主窗体调用函数

我有一个Form和一个UserControl。 在我的UserControl中,我有一个按钮,我想从Form中调用一个方法。 任何人都可以帮助C#?

可以使用哪些方法使线程等待事件然后继续执行?

我有一个线程运行,委托一些任务。 单个任务完成后,会发出一个事件,说明它已完成。 这些任务需要按特定顺序运行,需要等待上一个任务完成。 如何让线程等到收到“任务完成”事件? (除了设置标志然后循环轮询标志的明显的事件处理程序)

C#delegate vs eventHandler

我想在发生陷阱时向任何订户通知警报消息。 我通过委托方法(myDelegate del)制作的代码很好。 我的问题是…… 我想知道是否值得使用Eventhandler更好的代理? 在我的情况下,不确定委托和事件之间有什么不同? 通知(trapinfo t),这就是我在这里所做的,以获取陷阱信息。 但似乎不是一个好主意。 阅读一些介绍传递委托对象的在线教程课程,是否适合我的情况? 我该怎么办? 有什么建议? 非常感谢 :) 我的代码: public class trapinfo { public string info; public string ip; public string cause; } public class trap { public delegate void myDelegate(trapinfo t); public myDelegate del; trapinfo info = new trapinfo(); public void run() { //While(true) // If a trap […]

在Webbrowser控件中捕获Javascript警报

使用webbrowswer控件巡航网站。 有时会发生错误,其中包含一个javascript弹出框。 发生这种情况时,我想做几件事。 知道何时弹出javascript警报。 我已经使用LostFocus事件取得了一些成功,但任何时候丢失焦点都会导致代码运行起来很烦人。 我想知道警报框所说的确切文字。 我不知道在哪里可以找到警报框对象或将其转换为在C#中使用。 我看着整个互联网,却找不到它。 任何一个线索?