someObject.OnSomeEventComplete += delegate(object obj, EventArgs ea) {
// Do something
};
Удаление анонимного делегата
Я добавляю анонимный callback к eventу:
Код:
Какой наиболее рациональный способ чтобы по завершению выполнения "Do something"...этот анонимный делегат удалился бы от eventа?
у меня есть класс DB по работе с БД
чтобы выполнить какое-либо действие связонное с удаленной базой данных, я хочу делать так:
Код:
private void someMethod()
{
DB.ConnectASync();
DB.OnConnect += delegate() {
// код...код...код
// действия по удаленю делегата
}
}
{
DB.ConnectASync();
DB.OnConnect += delegate() {
// код...код...код
// действия по удаленю делегата
}
}
т.е. я хочу удалить только тот делегат который делается в том Method е.
Или как вообще решить проблему, что часто надо что-то делать сетевое в новом threadе ... и каждый раз использовать для этого новый Thread не хочется, т.к. можно обойтись одим который делает соединение с БД. Или как вообще решаются подобные задачи (а то я уже запутался в то что я хочу :D )?
Код:
[SIZE=2][COLOR=#008080][FONT=Courier New]Button[/FONT][/COLOR][/SIZE][FONT=Courier New][SIZE=2] btn = [/SIZE][SIZE=2][COLOR=#0000ff]new[/COLOR][/SIZE][SIZE=2] [/SIZE][SIZE=2][COLOR=#008080]Button[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New]();[/FONT]
[/SIZE][FONT=Courier New][SIZE=2][COLOR=#008080]EventHandler[/COLOR][/SIZE][SIZE=2] handler = [/SIZE][SIZE=2][COLOR=#0000ff]null[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New];[/FONT]
[FONT=Courier New]handler = [/FONT][/SIZE][FONT=Courier New][SIZE=2][COLOR=#0000ff]delegate[/COLOR][/SIZE][SIZE=2]([/SIZE][SIZE=2][COLOR=#0000ff]object[/COLOR][/SIZE][SIZE=2] sender, [/SIZE][SIZE=2][COLOR=#008080]EventArgs[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New] e)[/FONT]
[FONT=Courier New]{[/FONT]
[/SIZE][FONT=Courier New][SIZE=2][COLOR=#008080] MessageBox[/COLOR][/SIZE][SIZE=2].Show([/SIZE][SIZE=2][COLOR=#800000]"Hello, world"[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New]);[/FONT]
[FONT=Courier New] btn.Click -= handler;[/FONT]
[FONT=Courier New]};[/FONT]
[FONT=Courier New]btn.Click += handler;[/FONT]
[/SIZE][FONT=Courier New]
[/SIZE][FONT=Courier New][SIZE=2][COLOR=#008080]EventHandler[/COLOR][/SIZE][SIZE=2] handler = [/SIZE][SIZE=2][COLOR=#0000ff]null[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New];[/FONT]
[FONT=Courier New]handler = [/FONT][/SIZE][FONT=Courier New][SIZE=2][COLOR=#0000ff]delegate[/COLOR][/SIZE][SIZE=2]([/SIZE][SIZE=2][COLOR=#0000ff]object[/COLOR][/SIZE][SIZE=2] sender, [/SIZE][SIZE=2][COLOR=#008080]EventArgs[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New] e)[/FONT]
[FONT=Courier New]{[/FONT]
[/SIZE][FONT=Courier New][SIZE=2][COLOR=#008080] MessageBox[/COLOR][/SIZE][SIZE=2].Show([/SIZE][SIZE=2][COLOR=#800000]"Hello, world"[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New]);[/FONT]
[FONT=Courier New] btn.Click -= handler;[/FONT]
[FONT=Courier New]};[/FONT]
[FONT=Courier New]btn.Click += handler;[/FONT]
[/SIZE][FONT=Courier New]
спасибо!