Вызов события и ошибка "No overload for 'AddedTest' matches delegate 'System.EventHandler'" - C#

Узнай цену своей работы

Формулировка задачи:

Здравствуйте. Есть фрагмент кода, спертый с иностранного форума:
Листинг программы
  1. public void StartWatching(string PrinterDeviceName)
  2. {
  3. PrinterMonitorComponent mPr;
  4. mPr = new PrinterMonitorComponent();
  5. mPr.AddPrinter(PrinterDeviceName);
  6. mPr.JobAdded += AddedTest;
  7. }
  8. public void AddedTest(object sender, PrintJobEventArgs e)
  9. {
  10. string str = "";
  11. str += "Printer Name: " + e.PrintJob.PrinterName + Environment.NewLine;
  12. str += "User Name: " + e.PrintJob.UserName + Environment.NewLine;
  13. str += "Document Name: " + e.PrintJob.Document + Environment.NewLine;
  14. str += "Total Pages Printed: " + e.PrintJob.TotalPages + Environment.NewLine;
  15. str += "Date Time: " + e.PrintJob.Submitted + Environment.NewLine;
  16. }
Ругается на строку №7 "mPr.JobAdded += AddedTest;" с ошибкой "No overload for 'AddedTest' matches delegate 'System.EventHandler'" Я так понимаю, проблема в том, что

+=

вызывает стандартное событие с параметрами (object, EventArgs), а AddedTest работает с другими параметрами? Как можно вызвать событие и передать в него параметр типа PrintJobEventArgs? Спасибо.

Решение задачи: «Вызов события и ошибка "No overload for 'AddedTest' matches delegate 'System.EventHandler'"»

textual
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Windows.Forms;
  9. using System.Threading;
  10.  
  11. namespace WindowsFormsApplication4
  12. {
  13.     //Основная форма: класс-подписчик события
  14.     public partial class Form1 : Form
  15.     {
  16.         public Form1()
  17.         {
  18.             InitializeComponent();
  19.             //Событие загрузки формы
  20.             this.Load += delegate(object sender, EventArgs e)
  21.             {
  22.                 //Создаем экземпляр класса
  23.                 MyClass mc = new MyClass();
  24.                 //Подписываемся на событие в этом экземпляре
  25.                 mc.myEvent += new EventHandler<MyEventArgs>(mc_myEvent);
  26.                 //Запускаем метод этого экземпляра в отдельном потоке
  27.                 Thread myThread = new Thread(new ThreadStart(mc.StartWork));
  28.                 myThread.IsBackground = true;
  29.                 myThread.Start();
  30.             };
  31.         }
  32.         //Обработчик события, из аргумента события (MyEventArgs e) извлекается информация
  33.         //И выводится на метку label на форме
  34.         private void mc_myEvent(object sender, MyEventArgs e)
  35.         {
  36.             label1.Invoke((Action)delegate() { label1.Text = e.argsMessage.ToString(); });
  37.             label1.Invoke((Action)delegate() { label1.Refresh(); });
  38.         }
  39.     }
  40.     //Класс-издатель события
  41.     public class MyClass
  42.     {
  43.         //public-событие обобщенного типа EventHandler<T>
  44.         //где Т-наш тип класса-аргумента
  45.         public event EventHandler<MyEventArgs> myEvent;
  46.         //public-метод
  47.         public void StartWork()
  48.         {
  49.             for (int i = 0; i < 1000; i++)
  50.             {
  51.                 //Проверяем, есть ли подписчики на событие
  52.                 //Если есть, то генерируем событие с экземпляром класса-аргумента события
  53.                 if (myEvent != null)
  54.                     myEvent(this, new MyEventArgs(i));
  55.                 Thread.Sleep(100);
  56.             }
  57.         }
  58.     }
  59.     //Класс аргумента события для класса-издателя
  60.     public class MyEventArgs : EventArgs
  61.     {
  62.         //readonly переменная (значение устанавливается один раз в конструкторе)
  63.         public readonly int argsMessage;
  64.         //Конструктор класса
  65.         public MyEventArgs(int args)
  66.         {
  67.             argsMessage = args;
  68.         }
  69.     }
  70. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4.125 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы