Xamarin - вызов объекта System.IDisposable.Disposeon, созданного до того, как все ссылки на него выйдут из области видимости. - PullRequest
0 голосов
/ 16 января 2020

Я довольно новичок в Xamarin и C# (однако, я знаю C ++ и Java, поэтому я до сих пор хорошо справлялся с последними). Я столкнулся с предупреждением при создании IOnCheckedChangedListener для флажка, который я использую в своем (Android -) приложении.

До сих пор я создал простой класс OnCheckedChangedListener, который наследуется от Java.lang.Object и реализует IOnCheckedChangeListener. Естественно, метод OnCheckedChanged() также был реализован.

Я установил слушателя с помощью

OnCheckedChangedListener listener = new OnCheckedChangedListener();
checkBox.SetOnCheckedChangeListener(listener);

Пока все работает нормально, но я получаю предупреждение "Вызов System.IDisposable.Dispose для объекта, созданного функцией 'new OnCheckedChangedListener ()' до того, как все ссылки на него выйдут из области видимости. "

Я могу удалить это предупреждение, вызвав listener.Dispose() после установки прослушивателя или оборачивая всю вещь (вещь как в создании слушателя и устанавливая это в флажке) в блок using. Это избавляет от предупреждения, но приводит к ошибке времени выполнения при каждом вызове слушателя (я предполагаю, что это потому, что я фактически удалил слушателя, но программа все еще пыталась вызвать его).

Согласно на этот поток , на самом деле нет необходимости вызывать Dispose(), но я бы очень хотел избавиться от предупреждения. Есть ли хороший способ избавиться от этого (оптимально без указания компилятора просто игнорировать его)?

1 Ответ

1 голос
/ 16 января 2020

Если вы хотите что-то сделать, когда пользователь устанавливает или снимает флажок, вы можете зарегистрироваться для события RadioGroup CheckedChange, как показано ниже:

checkBox.CheckedChange += OnCheckedChange;
private void OnCheckedChange(object sender, RadioGroup.CheckedChangeEventArgs e)
{
        //include your code logic here
}

Или вы можете использовать лямбду напрямую

checkBox.CheckedChange += (s, e) =>
{
    //include your logic here
    //s = sender (checkbox)
    //e = RadioGroup.CheckedChangeEventArgs
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...