添加和删​​除变量的事件

时间:2013-12-17 17:27:42

标签: c# events

添加新文件时发生以下事件

    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;

提前致谢

2 个答案:

答案 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看起来不像它...

干杯 -