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