Member 13118954 Ответов: 1

.чистый предотвратить CA1009 - объявить первый параметр 'класса MyClass.метод mymethod' как объект с именем 'отправитель'


Привет.

У меня есть этот код в моем проекте .NET:
public delegate void CtrlVisible(Boolean v);

внутри класса, который не реализует EventArgs.
Я использую его таким образом:

rs.ctrlVisible += new clsReportStatus.CtrlVisible(rs_ctrlVisible);


где rs_ctrlVisible является:
public event CtrlVisible ctrlVisible;


Как я должен решить эту проблему?

Спасибо.

Что я уже пробовал:

Попробовал почитать документацию MSFT о событийно-ориентированной разработке.
Приведение экземпляров к объекту, а затем их повторное преобразование в логическое значение.

[no name]

https://msdn.microsoft.com/en-us/library/ms182133.aspx

Member 13118954

первое, что я сделал, это RTFM, если я спросил здесь, то это потому, что я не мог решить эту проблему, прочитав документацию MSFTs

1 Ответов

Рейтинг:
11

OriginalGriff

"События-это особый вид многоадресного делегата, который может быть вызван только из класса или структуры, где они объявлены." - MSDN.

Это означает, что сигнатура делегата, который может использоваться в качестве события, должна совпадать с сигнатурой всех событий: отправителя объекта и экземпляра производного класса EventArgs.
Bool не подходит: он не соответствует сигнатуре события.

Измените свой делегат, как предлагалось в сообщении об ошибке.


Member 13118954

Эй, @ OriginalGriff

Но мне нужно проверить значение моей логической переменной, чтобы сделать индикатор выполнения видимым или нет.

private void rs_ctrlVisible(bool v)
{
	try
	{
		if (this.InvokeRequired)
		{
			MethodInvoker del = delegate { rs_ctrlVisible(v); };
			this.Invoke(del);
		}
		else
		{
			progressBar1.Visible = v;
		}
	}
	catch
	{

	}
}


Как я мог бы достичь этой функциональности, используя аргументы object и EventArgs?

С уважением.

С уважением.

OriginalGriff

Объявите новый класс EventArgs, производный от EventArgs, и поместите в него свое логическое значение.

Member 13118954

Кажется, это лучший вариант. Я буду расследовать это подробнее.

спасибо

OriginalGriff

Пожалуйста!

Richard Deeming

"подпись делегата, который может быть использован в качестве события, должна совпадать с подписью всех событий"

Технически, это "должен" должно быть "должны" Вполне возможно - но определенно не рекомендуется-создавать события с помощью делегатов, которые не следуют стандартной сигнатуре .NET - например, многие COM-библиотеки делают именно это.

CA1009-это предупреждение FxCop, а не ошибка компилятора. :)