草庐IT

c# - 销毁对象时自定义事件是否需要设置为null?

假设我们有2个对象,Broadcaster和Listener。Broadcaster有一个名为Broadcast的事件,Listener订阅了该事件。如果Listener在没有取消订阅Broadcast事件的情况下被释放,它将保留在内存中,因为Broadcaster包含引用它的事件委托(delegate)。我很好奇的是,如果Broadcaster在没有Listener取消订阅或Broadcaster设置Broadcast=null的情况下被处置,Broadcaster是否会保留在内存中?除了一位博主认为不将事件设置为null会将源保留在内存中(找到here)之外,我无法找到任何对这个问

c# - 使用完成事件时如何避免意大利面条代码?

不知怎的,我不敢相信我是第一个遇到这个问题的人(我不想相信我是唯一一个愚蠢到不能直接看到解决方案的人),但我的搜索功能不是足够强大。我经常遇到这样一种情况,需要一个接一个地执行一些耗时的步骤。工作流程看起来像vardata=DataGetter.GetData();varprocessedData=DataProcessor.Process(data);varuserDecision=DialogService.AskUserAbout(processedData);//...我不想在每一步都阻塞UI,所以每个方法都会立即返回,并在完成后引发一个事件。现在欢闹接踵而至,因为上面的代码块

c# - WPF:如何防止控件窃取按键手势?

在我的WPF应用程序中,我想将输入手势附加到命令,以便输入手势在主窗口中全局可用,无论哪个控件具有焦点。在我的例子中,我想将Key.PageDown绑定(bind)到一个命令,但是,一旦某些控件获得焦点(例如TextBox或TreeView控件),这些控件就会收到键事件并且命令不再被触发。这些控件没有定义特定的CommandBindings或InputBindings。这就是我定义输入手势的方式:XAML:代码:usingSystem;usingSystem.Windows;usingSystem.Windows.Input;publicstaticclassCommands{priv

c# - 持续从流​​中读取?

我有一个Stream对象,它偶尔会获取一些数据,但时间间隔不可预测。出现在Stream上的消息是明确定义的,并且预先声明了它们的有效载荷的大小(大小是一个16位整数,包含在每个消息的前两个字节中)。我想要一个StreamWatcher类,它可以检测Stream上何时有数据。一旦完成,我希望引发一个事件,以便订阅的StreamProcessor实例可以处理新消息。这是否可以在不直接使用线程的情况下使用C#事件来完成?看起来应该很简单,但我无法完全理解设计它的正确方法。 最佳答案 当你说不直接使用线程时,我假设你仍然想通过异步调用间接使

c# - 异步多播委托(delegate)

我最近一直在做一个广泛使用事件的项目。我需要做的一件事是在多播委托(delegate)上异步调用多个事件处理程序。我认为诀窍是对GetInvocationList中的每个项目调用BeginInvoke,但似乎那里不存在BeginInvoke。有没有办法做到这一点,或者我是否需要开始使用ThreadPool.QueueUserWorkItem并以这种方式推出我自己的解决方案? 最佳答案 GetInvocationList只返回一个Delegate类型的数组,它不知道适当的签名。但是,您可以将每个返回值强制转换为您的特定委托(deleg

c# - 序列化对象时如何忽略事件订阅者?

当使用BinaryFormatter序列化以下类时,订阅Roar事件的任何对象也将被序列化,因为对这些对象的引用由EventHandler委托(delegate)持有.[Serializable]publicclassLion{publiceventEventHandlerRoar;publicstringName{get;set;}publicfloatFluffiness{get;set;}publicLion(stringname,floatfluffiness){Name=name;Fluffiness=fluffiness;}publicvoidPoke(){Roar();/

c# - 应该在引发事件的类内部还是外部声明委托(delegate)?

我见过各种事件处理的例子。这是一个:EventSample.有时我看到委托(delegate)在将引发事件的类外部声明(如上面的链接所示),有时在内部(我认为它应该被声明)。对我来说,在将引发事件的类中声明事件更有意义。原因是该类将声明的事件实际上只是辅助方法等的一些糖衣,它们实际上是在对委托(delegate)进行添加、减去和调用等操作。有什么最佳实践吗?是否有时您想在外部声明委托(delegate),而有时又想在内部声明委托(delegate)?如果是这样,应该如何决定要做什么? 最佳答案 通常,现在您会创建自己的派生自Even

c# - Visual Studio 2010 显示代码隐藏的可用事件

我在工作和家里都安装了VS2010。但在工作中我有这个很酷的功能。在代码隐藏文件中,我有两个下拉菜单。当我在左侧选择某个对象时,可以说是testButton或Default2(页面类),在右侧,我会获得该对象的所有可用事件,当我选择一个事件时,VisualStudio会在我的代码隐藏文件中自动生成它。在我家VS中,我实际上有2个下拉菜单,但它们的工作方式不同。我在右边有可用的对象,但是当我选择例如testButton时,它会显示aspx页面并指向这个按钮:/我应该在VS配置中设置sommething还是在工作中我有一些我不知道的插件的?有什么想法吗? 最佳答

c# - 将 LinkBut​​ton 的 OnClick 事件设置为代码隐藏中的方法

我正在从我的代码隐藏中构建一个LinkBut​​ton,我需要将onclick分配给一个方法,并用它传递一个参数。到目前为止我有这个:LinkButtonlnkdel=newLinkButton();lnkdel.Text="Delete";我想将它传递给的方法如下所示:protectedvoiddelline(stringid){} 最佳答案 您不能将它传递给该方法,您需要将点击事件委托(delegate)分配给能够处理它的方法。像这样:publicvoidDynamicClick(objectsender,EventArgse)

c# - 有和没有 "new"的接线事件之间的区别

在C#中,这两行代码之间有什么区别(如果有的话)?tmrMain.Elapsed+=newElapsedEventHandler(tmrMain_Tick);和tmrMain.Elapsed+=tmrMain_Tick;两者看起来完全一样。当您键入后者时,C#是否只是假定您指的是前者? 最佳答案 这是我做的staticvoidHook1(){someEvent+=newEventHandler(Program_someEvent);}staticvoidHook2(){someEvent+=Program_someEvent;}然后