Хорошо, я действительно не знаю, что случилось с моим кодом и Что происходит такПередача обработчика событий в качестве параметра
class Activity
имеет следующие методы
protected struct EventParams
{
public object sender;
public EventArgs e;
}
private EventParams WaitEventRaise_Body(ref EventHandler<EventArgs> handler, int timeout)
{
AutoResetEvent receiver = new AutoResetEvent(false);
EventParams result = new EventParams();
EventHandler<EventArgs> handle = new EventHandler<EventArgs>((sender, e) =>
{
result.e = e;
result.sender = sender;
receiver.Set();
});
handler += handle;
if (timeout > 0)
{
receiver.WaitOne(timeout);
}
else
{
receiver.WaitOne();
}
return result;
}
protected EventParams WaitEventRaise(ref EventHandler<EventArgs> handler)
{
return WaitEventRaise_Body(ref handler, -1);
}
protected EventParams WaitEventRaise(ref EventHandler<EventArgs> handler, int timeout)
{
return WaitEventRaise_Body(ref handler, timeout);
}
Хорошо, так я считаю себя писать снова и снова снова AutoResetEvent, поэтому я решил создать метод. Но когда я пытаюсь вызвать этот метод из производного класса Bot : Activity
EventParams eventResult = WaitEventRaise(ref currentJob.JobReported);
дает
Error 30 The best overloaded method match for Project.Activity.WaitEventRaise(ref System.EventHandler)' has some invalid arguments
currentJob является Job : Activity
класс, который имеет событие
public event EventHandler<JobReport> JobReported;
и
class JobReport : EventArgs
Что я хочу сделать, так это то, что бот делает задания, на самом деле он создает рабочие места и ждет их для завершения своей работы. Класс Job вызывает событие внутри, чтобы класс бота заметил, что он завершил свою работу. И класс бота ждет, пока работа не активирует событие. Поэтому я надеюсь, что это ясно. И мне жаль, что английский не мой родной язык.
'EventHandler' не может быть выведено как 'EventHandler ', поэтому это не сработает. –
James
Это не работает для JobReport? класс JobReport: EventArgs – user1046403
OK Я пытался использовать EventParams eventResult = WaitEventRaise (ref currentJob.test); , где общественное мероприятие EventHandler test; , и это дает мне ошибку: тест события может появляться только в левой части + = и т. Д. И т. Д. –
user1046403