Реагирование на события, запускаемые API в C # - PullRequest
0 голосов
/ 26 августа 2011

Я использую API со следующим EventHandler:

static EventHandler<GPRSArgs> EventStateChanged

Как я могу получить эти события в своем клиентском приложении, чтобы я мог реагировать на них?

Ответы [ 5 ]

1 голос
/ 26 августа 2011

подписаться на событие.

Лямбда:

EventStateChanged += (sender, gprsArgs) => { do your thing }

делегат:

void Listener(object sender, GPRSArgs args)
{
    do your thing
}

EventStateChanged += Listener;
1 голос
/ 26 августа 2011

просто подключитесь к этому событию. Вы дали немного кода, но предполагая, что ваше имя класса MyClass, вы можете сделать

MyClass.EventStateChanged += MyEventHandler

с

void MyEventHandler(object sender, GRPSArgs e)
{
 // ...
}

или лямбда-соединение:

MyClass.EventStateChanged += (sender, e) => { /* whatever you want */ }
0 голосов
/ 26 августа 2011

Вам нужно будет подписаться на событие:

theClassWithEvent.EventStateChanged += 
    delegate (object sender, GRPSArgs e)
    {
        //process the event
    };

Событие также нужно будет вызвать для оповещения всех подписчиков, из theClassWithEvent:

if (EventStateChanged != null)
{
    EventStateChanged(someObject, new GRPSArgs());
}

Обратите внимание на использование someObject выше, потому что выставленное событие - static, вы не можете передать this и sender, поэтому необходимо будет отправить что-то подходящее. Хотя, поскольку вы говорите, что используете это из API, я думаю, мы можем предположить, что вам не нужно совершать этот вызов, а нужно только подписаться на событие.

0 голосов
/ 26 августа 2011

Полагаю, вы пропустили public и event в объявлении:

public class GPRSThingy
{
    public static event EventHandler< GPRSArgs > EventStateChanged;
    ...
}

Тогда используйте его

void DoSomething(GPRSArgs e)
{
    // whatever
}

var gprstThingy = new GPRSThingy();
gprstThingy.EventStateChanged += (sender, e) => { DoSomething(e); };

Сортировка.

0 голосов
/ 26 августа 2011

Подпишитесь на него, как и на любое другое событие.

Я полагаю, APIClass - это класс, который API имеет для события EventStateChanged.

Где-то в вашем коде вы подписываетесьна событие, как показано ниже:

APIClass.EventStateChanged += EventStateChangedHandler;

Предполагается, что у вас есть следующий метод:

private void EventStateChangedHandler(object sender, GPRSArgs e)
{
    // Code to react to the event.
}

Вы можете сделать это в одну строку с лямбда-выражением:

APIClass.EventStateChanged += (sender, e) => { /* Code to react to the event */ }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...