System.InvalidOperationException: «Привязка данных не может произойти, если не указан BindingContext или BindingContext Control». - PullRequest
0 голосов
/ 29 мая 2020

Заявление о проблеме :

У меня есть форма A, и здесь я вызываю один API, и для завершения его работы требуется несколько секунд. Итак, в это время пользователь закрывает форму A. Благодаря этому объект, созданный в форме A, удаляется.

Когда ответ возвращается от API и пытается вызвать метод DataBinding (), он выдает это исключение. : System.InvalidOperationException: 'Привязка данных не может произойти, если не указан BindingContext или BindingContext Control.'

Код :

public partial class FormA{
    private async void BindData(){
        var response = await _service.APICall(id);
        ultraComboEditor.DataSource = response;
        ultraComboEditor.DataBind(); //This throws the exception.
    }
}

Вопрос :

Как избежать этого исключения?

Я могу добавить блок try catch и избежать этого исключения, но это не очень хороший подход. Итак, есть ли лучшее решение для этого?

1 Ответ

0 голосов
/ 01 июня 2020

Я нашел идеальное решение этой проблемы. Причиной проблемы root было то, что мы ждем завершения задачи при закрытии формы.

Ссылка : Ожидание асинхронной функции внутри события FormClosing

Решение :

Решение моей проблемы заключалось в том, чтобы добавить логическую переменную (например: _acyncClose) и установить для нее значение true при закрытии формы, а затем после вызова API, который я проверяю это свойство.

Код :

public partial class FormA{
    private bool _asyncClose = false;

    private async void BindData(){
        var response = await _service.APICall(id);
        if (_asyncClose) return;
        ultraComboEditor.DataSource = response;
        ultraComboEditor.DataBind(); //This throws the exception.
    }

    private void Form_Closing_Event(){
        _asyncClose = true;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...