Вызов события и ошибка "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; } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д