Здравствуйте, L0rdNet, Вы писали:
LN>Облазил весь форум, но все равно не могу понять, как правильно (корректно) вызвать события асинхронно.
LN>Обязательно вызывать EndInvoke? LN>Если не буду вызывать EndInvoke, какие последствия?
Вас распнут
LN>Хороший, наглядный примерчик не помешает.
Здравствуйте, L0rdNet, Вы писали:
LN>Обязательно вызывать EndInvoke?
MSDN гласит что обязательно.
LN>Если не буду вызывать EndInvoke, какие последствия?
Зависит от того чей EndInvoke() вызываете. Одни классы могут в нём ничего военного и не делать, а другие могут изменять внутреннее состояние, освобождать какие-нибудь ресурсы получаемые в BeginInvoke() и т.д.
Здравствуйте, L0rdNet, Вы писали:
LN>Облазил весь форум, но все равно не могу понять, как правильно (корректно) вызвать события асинхронно.
LN>Обязательно вызывать EndInvoke?
Насколько я знаю, необязателен EndInvoke только для класса System.Windows.Forms.Control
Здравствуйте, L0rdNet, Вы писали:
LN>Обязательно вызывать EndInvoke?
Надо просто понимать, зачем это надо, а обязательно или нет — решай сам.
Я сейчас понимаю так, что его надо вызывать, чтобы:
1. получить результат, если асинхронно вызваемый метод возвращает значение;
2. получить исключение, если в асинхронном методе произошло исключение.
Здравствуйте, Spiceman, Вы писали:
S>Здравствуйте, L0rdNet, Вы писали:
LN>>Обязательно вызывать EndInvoke?
S>Надо просто понимать, зачем это надо, а обязательно или нет — решай сам.
Не вызвать — и получить протечку.
S>Я сейчас понимаю так, что его надо вызывать, чтобы: S>1. получить результат, если асинхронно вызваемый метод возвращает значение; S>2. получить исключение, если в асинхронном методе произошло исключение.
Вызывать EndXxx надо обязательно. Джефри Рихтер: "При инициализации асинхронной операции CLR выделяет под нее внутренние ресурсы. Если EndXxx не вызвать, то эти ресурсы освободятся только при завершении процесса".