添加新文件时发生以下事件
public delegate void OnFileReceived(object sender, _File item);
private OnFileReceived _fileReceivedHandler = null;
public event OnFileReceived OnFileReceivedEvent
{
add { _fileReceivedHandler += value; }
remove { _fileReceivedHandler -= value; } //what does this line do?
}
public void AddFile(_File file)
{
RaiseFileEvents(file);
}
在Application Constructor中
public void Initialize()
{
callback = new Callback();
callback.OnFileReceivedEvent += Callback_OnFileReceivedEvent;
}
public void Callback_OnFileReceivedEvent(object sender, _File file)
{
collection.Add(new _Item(file.Name,file.Path,file.Size));
}
我的WCF服务调用此事件在客户端的ListView中添加文件项,我想让服务也能够删除文件,我是否必须为此创建另一个事件,或者我可以使用同样的事件这样? :
callback.OnFileReceivedEvent -= Callback_OnFileRemovedEvent;
提前致谢
答案 0 :(得分:1)
//这行是做什么用的?
取消订阅在触发事件时执行的给定函数。对我来说,这段代码看起来很可疑。我会用
替换它public event EventHandler<_File> OnFileReceivedEvent;
public void AddFile(_File file)
{
// ...
// to raise event
var handler = OnFileReceivedEvent;
if (handler != null)
handler(this, file);
}
我是否必须为此制作另一个活动,或者我可以通过这种方式使用相同的活动吗?
您需要添加另一个事件以删除与现有添加文件类似的内容。
我认为你只需要阅读有关事件的内容,一切都会解决;)
答案 1 :(得分:0)
你必须再举办一次活动。您可以通过创建一个从EventArgs降序的新类并将其作为第二个arg创建一个事件来将其汇总到一个事件中 - 它将包含文件名和操作;但这很复杂,也不太干净(恕我直言)。
顺便提一下,删除行是为了允许取消订阅。通常更容易做到:
公共事件OnFileReceived OnFileReceivedEvent;
...如果你想自己控制它们,你只需要添加/删除(你不会经常这样做)。
此外,你的事件应该真的有它的第二个arg是一个派生自EventArgs的类型:_File看起来不像它...
干杯 -