草庐IT

C# 显式删除事件处理程序

我想知道将对象设置为null是否会清除所有附加到对象事件的事件处理程序...例如Buttonbutton=newButton();button.Click+=newEventHandler(Button_Click);button=null;button=newButton();button.Click+=newEventHandler(Button_Click);button=null;等...会不会造成内存泄漏? 最佳答案 如果在任何地方都没有对button的其他引用,那么就没有必要在此处删除事件处理程序以避免内存泄漏。事件处理

c# - 取消 ListBox SelectedIndexChange 事件

是否可以取消winforms应用程序上列表框的SelectedIndexChange事件?这似乎是合乎逻辑的事情,我必须忽略一些简单的功能。基本上,我一直在弹出一个消息框,询问用户是否真的想移动到另一个项目,因为这会改变UI,我不希望他们的更改丢失。如果用户没有保存他们正在处理的内容,我希望能够取消该事件。有更好的方法吗? 最佳答案 您无法取消它。几天前我所做的是让一个变量包含最新选择的索引。然后当事件触发时,您询问用户是否要保存,这是在事件处理程序中完成的。如果用户选择“取消”,您将再次更改ID。问题是这会使事件再次触发。所以我用

c# - Microsoft Visual Studio 和 C# : How to Visually Add Events to Controls?

如何使用C#在MicrosoftVisualStudio(2008)中的表单中向控件添加事件处理程序?我可以手动完成,但是打开Form的Designer.cs文件,但我找不到通过界面完成的方法。在MSVC6中,使用C++和MFC,您可以右键单击或其他一些操作,并找到该控件所有可能事件的列表。然后你选择它,它会弹出窗口让你创建一个方法来关联那个事件。在VB中更容易,您可以在代码中完成,它会在方法下拉列表中列出所有事件。但是,我无法在2008年使用C#找到任何此类内容。Intellisense帮助填写正确的方法信息。但是,它总是在Designer.cs文件中创建方法,而不是在分部类的另一半

c# - PropertyChangedEventHandler 是如何工作的?

这是一个非常简单的问题,但我想知道是否有人可以解释第4行实际上在做什么?所以第一行给处理程序一个事件。我真的不知道在什么情况下处理程序会返回null或最后一行的作用。当您将对象和更改的属性传递给处理程序时,它对它们做了什么?PropertyChangedEventHandlerhandler=PropertyChanged;//propertychangedistheeventif(handler!=null){handler(this,newPropertyChangedEventArgs(name));}我想我是用它来得到这个code但我想充分了解它在做什么。

C# 如何在按住鼠标按钮时循环

你能给我指出正确的方向吗?我试图在按下表单按钮时触发一个循环。//pseudocodeWhile(button1ispressed)value1+=1然后当然会在释放按钮时停止循环 最佳答案 为避免使用线程,您可以添加Timer在您的表单/控件上添加组件,只需在鼠标按下时启用它并在鼠标抬起时禁用它。然后将通常放在循环中的代码放入Timer_Tick事件中。如果您想使用System.Timers.Timer,您可以改用Timer.Elapsed事件。示例(使用System.Timers.Timer):usingTimer=System

c# - 在 C# 中使事件异步的最佳方法

事件在C#中是同步的。我有这个应用程序,其中我的主窗体启动一个线程,其中有一个循环监听流。当流中出现某些事件时,就会从循环中向主窗体触发一个事件。如果主窗体运行缓慢或显示消息框或其他内容,循环将被暂停。解决这个问题的最佳方法是什么?通过在主窗体上使用回调和调用? 最佳答案 由于您使用的是表单,因此更简单的方法是使用BackgroundWorker组件。TheBackgroundWorkerclassallowsyoutorunanoperationonaseparate,dedicatedthread.Time-consumingo

c# - 试图理解事件聚合器模式

我正在尝试以一种简单的方式实现事件聚合器模式以逐步学习它。但是我没有找到任何书籍或不错的视频教程来谈论它的实现。我刚刚发现了一些不错的文章,例如http://weblogs.asp.net/rashid/archive/2009/03/05/use-event-aggregator-to-make-your-application-more-extensible.aspx和http://martinfowler.com/eaaDev/EventAggregator.html第一篇文章太大,无法让我理解模式,第二篇文章未完成:)。顺便说一句,我创建了我的类(class):publiccl

c# - 在没有外部委托(delegate)定义的情况下定义 C# 事件

出于好奇:是否可以在C#中定义事件而不预先定义委托(delegate)类型?类似于publicevent(delegatevoid(int))EventName 最佳答案 内置通用委托(delegate)类型,Action和Func,其中Action返回void。每个泛型类型参数都是要传递给委托(delegate)的参数的类型。例如publiceventActionEventName;此外,还有一个通用的EventHandler遵循传递对象发送者并具有EventArgs类型的约定。 关于

c# - 静态事件与 C# 中的非静态事件相比如何?

我刚刚意识到存在静态事件-我很好奇人们如何使用它们。我想知道相对比较如何支持静态方法与实例方法。例如,静态方法基本上是一个全局函数。但我总是将事件与对象的实例联系起来,但我很难在全局层面考虑它们。这里有一些代码可以引用,如果它有助于解释:voidMain(){varc1=newC1();c1.E1+=()=>Console.WriteLine("E1");C1.E2+=()=>Console.WriteLine("E2");c1.F1();}//>+D()publicdelegatevoidD();//+>E1//+>>E2//+F()//>//>E1//>E2publicclassC

c# - 事件 ID 管理的最佳实践是什么?

我正在尝试弄清楚如何管理我的事件ID。到目前为止,我一直在手动将每个事件ID放入每个方法中,方法中的每个步骤都按顺序编号。这不允许我有效地过滤事件日志中的事件。为了在事件日志中使用过滤器,似乎每个记录的事件都必须有自己唯一的ID。我可以将它们全部存储在一个表中,并带有链接到它们的描述,但是当我的代码执行时,我正在记录“神奇”的无意义事件代码。我进行了Google搜索,但我似乎不知道要使用正确的关键字来弄清这个问题的根源。提前致谢 最佳答案 像Ben的建议一样,使用一定程度的间接访问可能是值得的-但我不会为代码使用int,而是使用实际