Tag: 事件

怎么可能这个== null?

编辑 :这不是这个问题的重复,因为这是一个使用Delegate.CreateDelegate的实际例子,另一个是关于IL的理论讨论。 除了单词this和null之外,没有什么可以互相做。 相对于这个问题 …… 我遇到一个在null的实例上调用事件处理程序的情况。 奇怪的。 看图像: 我不明白发生了什么。 如何在null实例上调用实例方法???

如何创建按钮并从回发中连接事件

我需要最初基于相当多的处理器和磁盘密集型搜索来生成按钮。 每个按钮代表一个选择并触发回发。 我的问题是回发不会触发命令b_Command。 我猜是因为没有重新创建原始按钮。 我无法在回发中执行原始搜索以重新创建按钮,因此我想从回发信息生成所需的按钮。 我该怎么做以及在哪里做这件事? 我应该在Page_Load之前做这件事吗? 如何从回发中重新构造CommandEventHandler – 如果有的话? namespace CloudNavigation { public partial class Test : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (IsPostBack) { // how can I re-generate the button and hook up the event here // without executing heavy search 1 } else { // Execute heavy […]

WPF FileDrop事件:只允许特定的文件扩展名

我有一个WPF控件,我想从我的桌面删除一个特定的文件到这个控件。 这不是一个沉重的部分,但我想检查文件扩展名以允许或禁止删除。 解决这个问题的最佳方法是什么?

未注册的事件处理程序会导致内存泄漏

我正在维护一个内存泄漏的Web应用程序。 基于我使用Red Gate ANTS内存分析器的调查,我很确定内存泄漏是由业务层中的事件处理程序引起的。 有一个集合在每个添加的项目上注册一个事件处理程序,以便集合可以在项目的日期更改时重新排序。 看来这个事件处理程序是罪魁祸首。 此应用程序的业务层非常复杂,因此将集合及其项目保留在内存中会拖拽其他一些对象。 我在集合上实现了IDisposable,并在Dispose方法中删除了事件处理程序: p.OnPunchDateChanged -= this.OnPunchDateChanged; 但是,实现IDisposable并没有帮助,因为我无法在using或try / catch块中包装对集合的所有引用。 此集合由我无法控制的应用程序部分使用。 如何清除这些事件处理程序以解决此内存泄漏?

在单独的线程上引发事件

我正在开发一个组件,需要处理实时馈送并以非常快的方式向听众广播数据(大约100纳秒级别的准确度,甚至比我能做到的还要少)目前我正在筹集一个事件来自我的订阅者可以订阅的代码。 但是因为在C#中,事件处理程序在引发事件的同一个线程上运行,所以引发事件的线程将被阻塞,直到所有订阅者完成事件的处理。 我无法控制订阅者的代码,因此他们可能会在事件处理程序中执行任何耗时的操作,这可能会阻塞正在广播的线程。 我该怎么办才能将数据广播给其他订阅者,但仍可以快速播放这些内容?

在什么情况下从必要的事件中分离?

我不确定我是否完全清楚附加对象中的事件的含义。 这是我目前的理解,正确或精细: 1.不需要分离附加到本地类事件 例子: this.Closing += new System.ComponentModel.CancelEventHandler(MainWindow_Closing); public event EventHandler OnMyCustomEvent = delegate { }; 我假设当你的对象被处理或被垃圾收集时,这些函数会被释放并自动从事件中分离出来。 2.必须分离附加到不再需要的对象(= null;) 示例:附加到计时器的Elapsed事件,您只响应一次。 我假设您需要将Timer存储在本地变量中,以便在事件触发后分离Elapsed事件。 因此,在本地方法范围内声明计时器会导致泄漏: System.Timers.Timer myDataTimer = new System.Timers.Timer(1000); myDataTimer.Elapsed += new System.Timers.ElapsedEventHandler(myDataTimer_Elapsed); 3.将本地对象中的事件附加到您的class级不需要处理? 例如,如果您有一个ObservableCollection,您可以创建,监视并让它们死掉。 如果使用本地私有函数附加到CollectionChanged事件,当您的类被垃圾收集时,此函数是否会解除分配,导致ObservableCollection也被释放? 我确定我有停止使用对象并且无法从事件中分离的地方(例如,我制作的计时器示例),所以我正在寻找关于它是如何工作的更清楚的解释。

VB.Net缺乏隐式接口是否使我想做的事情变得不可能?

我知道VB.Net不允许像C#这样的隐式接口实现。 因此,如下代码没有直接的VB.Net相关性: public interface IBackgroundWorkerAdapter { bool IsBusy { get; set; } bool WorkerReportsProgress { get; set; } bool WorkerSupportsCancellation { get; set; } event DoWorkEventHandler DoWork; event ProgressChangedEventHandler ProgressChanged; event RunWorkerCompletedEventHandler RunWorkerCompleted; void RunWorkerAsync(); void CancelAsync(); void ReportProgress(int progressPercent); void ReportProgress(int progressPercent, object userState); } public class BackgroundWorkerAdapter: BackgroundWorker, IBackgroundWorkerAdapter { } 因此,我在VB.Net中可以想到的最接近的想法是使用Shadows关键字执行以下操作(因为没有任何操作是虚拟的): Public […]

C#停止执行直到事件发生

我需要停止执行程序,直到用户单击按钮。 我正在进行离散事件模拟,现在的目标是提供说明情况的简单图形。 当模拟到达值得显示的事件时,调用绘制该情况的方法。 我需要在用户单击按钮之前不跳回模拟核心的方法(仅在达到有趣点时再次调用)。

如何从VB.NET中的事件中获取实际的EventHandler委托实例?

在C#中,我可以这样做: EventHandler handler = this.SomeEvent; ……这会让我做,例如,做: Delegate[] attachedHandlers = handler.GetInvocationList(); 在VB.NET中,我似乎无法弄清楚如何做类似的事情。 这不起作用: Dim handler As EventHandler = Me.SomeEvent …由于以下错误: 公共事件SomeEvent(sender As Object,e As EventArgs)’是一个事件,不能直接调用。 使用’RaiseEvent’语句来引发事件。 但这也不起作用: Dim handler As EventHandler = AddressOf Me.SomeEvent …因为: ‘AddressOf’操作数必须是方法的名称(没有括号)。 那么如何从VB.NET中的事件中实际获取EventHandler呢? 立即想到的唯一想法是使用reflection,但这看起来非常荒谬。

什么是用于连接和声明事件的C#代码的VB.NET等价物?

我正在开发一个在Silverlight中构建媒体播放器的教程 ,我正在尝试将EventHandler到DispatchTimer对象的timer.Tick事件,以便video的时间与Slider对象同步。 示例代码在C#中,我不能在我的生活中找出VB.NET中使用RaiseEvent和/或Handles连接事件的正确语法。 以下是相关的C#代码。 我会在我遇到困境的地方加上评论。 private DispatchTimer timer; public Page() { //… timer = new DispatchTimer(); timer.Interval = TimeSpan.FromMilliseconds(50); timer.Tick += new EventHandler(timer_Tick); // 0) { sliderScrubber.Value = VideoElement.Position.TotalSeconds / VideoElement.NaturalDuration.TimeSpan.TotalSeconds; } }