У меня есть класс в java, который в основном выполняет поиск в асинхронном режиме, и я возвращаю результат через прослушиватель, мне нужно написать эту же процедуру в С#. Я знаю, что есть некоторые различия между java и поэтому не могут писать, я новичок в С# Мне нужен хотя бы горизонт.
public class Operation {
private List<Operation.Listener> ListEventResult = new ArrayList<Operation.Listener>();
public void Search(String word){
try {
Thread.sleep(3000);
} catch(InterruptedException ex) {
Thread.currentThread().interrupt();
}
if(ListEventResult.size()>0){
for(Operation.Listener li : ListEventResult){
li.Result("Result for "+word);
}
}
}
public void addEventResult(Listener li){
ListEventResult.add(li);
}
public interface Listener{
public void Result(String result);
}
}
public class Program {
public static void main(String[] args) {
// TODO Auto-generated method stub
Operation op = new Operation();
op.addEventResult(new Operation.Listener() {
@Override
public void Result(String result) {
System.out.println(result);
}
});
op.Search("Facebook");
}
}
События и делегаты
События в С# реализуются с делегатами. Класс публикации определяет делегата. Класс подписки выполняет две вещи: во-первых, он создает метод, который соответствует сигнатуре делегата, а затем создает экземпляр этого типа делегата, инкапсулирующий этот метод. Когда событие поднимается, методы класса подписки вызываются через делегат. Метод, обрабатывающий событие, называется обработчиком событий. Вы можете объявить обработчики событий, как и любой другой делегат.
текстовое http://msdn.microsoft.com/en-us/library/orm-9780596521066-01-17.aspx
Вам не нужен список событий, как в java, потому что собственный С# обрабатывает события как коллекцию, что позволяет добавить их с помощью оператора "+"
простой пример вашего кода в С#
class Operation
{
public delegate void ResultHandler(object Operation, String result);
public event ResultHandler Result;
public void Search(String word) {
Thread.Sleep(3000);
if (Result != null)
Result(this, "Result for " + word);
}
}
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
Operation op = new Operation();
op.Result += op_Result;
op.Search("Facebook");
}
void op_Result(object Operation, string result)
{
MessageBox.Show(result);
}
}