Вызов события и ошибка "No overload for 'AddedTest' matches delegate 'System.EventHandler'" - C#
Формулировка задачи:
Здравствуйте.
Есть фрагмент кода, спертый с иностранного форума:
Ругается на строку №7 "mPr.JobAdded += AddedTest;" с ошибкой
"No overload for 'AddedTest' matches delegate 'System.EventHandler'"
Я так понимаю, проблема в том, что
public void StartWatching(string PrinterDeviceName)
{
PrinterMonitorComponent mPr;
mPr = new PrinterMonitorComponent();
mPr.AddPrinter(PrinterDeviceName);
mPr.JobAdded += AddedTest;
}
public void AddedTest(object sender, PrintJobEventArgs e)
{
string str = "";
str += "Printer Name: " + e.PrintJob.PrinterName + Environment.NewLine;
str += "User Name: " + e.PrintJob.UserName + Environment.NewLine;
str += "Document Name: " + e.PrintJob.Document + Environment.NewLine;
str += "Total Pages Printed: " + e.PrintJob.TotalPages + Environment.NewLine;
str += "Date Time: " + e.PrintJob.Submitted + Environment.NewLine;
}+=
вызывает стандартное событие с параметрами (object, EventArgs), а AddedTest работает с другими параметрами? Как можно вызвать событие и передать в него параметр типа PrintJobEventArgs? Спасибо.Решение задачи: «Вызов события и ошибка "No overload for 'AddedTest' matches delegate 'System.EventHandler'"»
textual
Листинг программы
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;
namespace WindowsFormsApplication4
{
//Основная форма: класс-подписчик события
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
//Событие загрузки формы
this.Load += delegate(object sender, EventArgs e)
{
//Создаем экземпляр класса
MyClass mc = new MyClass();
//Подписываемся на событие в этом экземпляре
mc.myEvent += new EventHandler<MyEventArgs>(mc_myEvent);
//Запускаем метод этого экземпляра в отдельном потоке
Thread myThread = new Thread(new ThreadStart(mc.StartWork));
myThread.IsBackground = true;
myThread.Start();
};
}
//Обработчик события, из аргумента события (MyEventArgs e) извлекается информация
//И выводится на метку label на форме
private void mc_myEvent(object sender, MyEventArgs e)
{
label1.Invoke((Action)delegate() { label1.Text = e.argsMessage.ToString(); });
label1.Invoke((Action)delegate() { label1.Refresh(); });
}
}
//Класс-издатель события
public class MyClass
{
//public-событие обобщенного типа EventHandler<T>
//где Т-наш тип класса-аргумента
public event EventHandler<MyEventArgs> myEvent;
//public-метод
public void StartWork()
{
for (int i = 0; i < 1000; i++)
{
//Проверяем, есть ли подписчики на событие
//Если есть, то генерируем событие с экземпляром класса-аргумента события
if (myEvent != null)
myEvent(this, new MyEventArgs(i));
Thread.Sleep(100);
}
}
}
//Класс аргумента события для класса-издателя
public class MyEventArgs : EventArgs
{
//readonly переменная (значение устанавливается один раз в конструкторе)
public readonly int argsMessage;
//Конструктор класса
public MyEventArgs(int args)
{
argsMessage = args;
}
}
}