【发布时间】:2011-04-26 12:16:57
【问题描述】:
我有一个要在特定时间间隔内更新的内存流对象。
当内存流对象发生更新时,应该创建并引发该事件。 然后应该有一个事件处理程序来处理引发的事件。
请为参考建议任何代码或示例。
提前致谢。
【问题讨论】:
标签: c# events event-handling
我有一个要在特定时间间隔内更新的内存流对象。
当内存流对象发生更新时,应该创建并引发该事件。 然后应该有一个事件处理程序来处理引发的事件。
请为参考建议任何代码或示例。
提前致谢。
【问题讨论】:
标签: c# events event-handling
你知道事件的逻辑吗?
如果是这样,请在您的内存流将被更新的类中创建一个事件。 更新时,引发事件。
在类的消费者处注册事件。
而且,基本上,就是这样?
也许您的疑问是一般事件。为此,我建议您阅读 MSDN,例如
【讨论】:
有几种方法可以解决这个问题。
最简单的方法是那个刚刚打败我的人建议的方法,而不是直接调用 MemoryStream.Write(),而是在你的应用程序中编写一个调用 MemoryStream.Write() 的方法,然后调用一个事件您在 MemoryStream 对象之外声明自己。
在更奇特但更简洁的角落,您可以大胆地从 MemoryStream 继承一个类,在该类中添加一个事件属性并覆盖 Write() 方法(或您调用的任何用于写入的方法)调用基类 Write() 方法,然后引发事件。有些人可能会采用这种方法,它可能不太理想或存在问题,具体取决于您使用 MemoryStream 的方式,但它会完成您想要的工作,并且让您不必在每次编写时都自己引发事件。
【讨论】:
可以在http://www.switchonthecode.com/tutorials/csharp-snippet-tutorial-custom-event-handlers 找到有关注册和引发自定义事件的一个很好的示例
更新:链接已损坏,我使用archive.org 从那里引用(更改了事件引发部分以避免竞争条件):
using System;
namespace CustomEvents
{
public class Car
{
public delegate void OwnerChangedEventHandler(string newOwner);
public event OwnerChangedEventHandler OwnerChanged;
private string make;
private string model;
private int year;
private string owner;
public string CarMake
{
get { return this.make; }
set { this.make = value; }
}
public string CarModel
{
get { return this.model; }
set { this.model = value; }
}
public int CarYear
{
get { return this.year; }
set { this.year = value; }
}
public string CarOwner
{
get { return this.owner; }
set
{
this.owner = value;
// To avoid race condition
var ownerchanged = this.OwnerChanged;
if (ownerchanged != null)
ownerchanged(value);
}
}
public Car()
{
}
}
}
【讨论】: