2013-12-17 4 views
0

У меня есть следующее событие, которое происходит, когда новый файл добавляетсясобытия для добавления и удаления переменной

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); 
    } 

В заявке Конструктора

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

Все, что вы делаете с этой последней строкой удаление подписки на 'Callback_OnFileRemovedEvent' так, что она не будет называться, когда' OnFileReceivedEvent пожары. Это фактически не удалит файл из вашей коллекции. Это не будет делать то, что вы намеревались. Может быть, я вас не понимаю. –

ответ

1

// что делает эту линию делать?

Отменяет данную функцию от выполнения при запуске события. Для меня этот код выглядит подозрительно. Я хотел бы заменить его

public event EventHandler<_File> OnFileReceivedEvent; 

public void AddFile(_File file) 
{ 
    // ... 
    // to raise event 
    var handler = OnFileReceivedEvent; 
    if (handler != null) 
     handler(this, file); 
} 

Должен ли я сделать еще одно событие для этого, или я могу сделать это с тем же событием таким образом?

Вам необходимо добавить еще одно событие для удаления аналогичного существующего файла добавления.

Я думаю, что вам просто необходимо прочитать о событиях и все будет разобраться;)

+0

И да, хорошей практикой является передача класса, перенесенного из EventArgs в качестве параметра для EventHandler <> – garf1eld

0

Вы должны сделать еще одно событие. Вы можете свернуть его в одно событие, создав новый класс, спускающийся с EventArgs, и создав событие с этим как вторым аргументом - он будет содержать имя файла и действие; но это становится сложным и не слишком чистым (ИМХО).

Кстати, строка удаления должна позволять чему-то отказаться от подписки. Как правило, проще просто:

общественное мероприятие OnFileReceived OnFileReceivedEvent;

... и добавьте/удалите только, если вы хотите сами контролировать их (что вы не очень часто).

Кроме того, ваше мероприятие действительно должны иметь это второй аргумент будет тип, полученный из EventArgs: _file не выглядит, как он делает ...

Приветствия -

+0

Вы имеете в виду, что он работает так же, если я заменил его на эту строку 'public event OnFileReceived OnFileReceivedEvent;', событие уже работает, но я не знаю, написал ли я лишнюю строку, почему это событие необходимо второй аргумент? –

+0

Да. Если вы не предоставите добавление и удаление, компилятор будет генерировать их для вас вместе с полем поддержки (_fileReceivedHandler), как и со свойствами. –

+0

Не знаете, о чем вы еще говорите: «public event» - это доступность (общедоступная) и то, что это (событие).Это событие типа OnFileReceived (вы определите делегат этого типа), и вы назвали его OnFileReceivedEvent (можно было бы назвать Jim для всех забот компилятора). Это все, что вам нужно. –

Смежные вопросы