Звучит так, как будто вы спрашиваете одного из следующих
- Учитывая, что этот метод выполняется в фоновом потоке, в методах
Invalidate
и Close
я должен проверять свойство InvokeRequired
?
- Учитывая, что этот метод запускается в фоновом потоке, свойство
InvokeRequired
всегда будет возвращать false
, так что я должен просто избегать его проверки?
Для № 1 ответ - нет. Методы Close
и Invalidate
не обязаны проверять свойство InvokeRequired
. Неявная часть их контракта заключается в том, что свойство InvokeRequired
должно быть ложным до их вызова.
Для # 2, да, если он всегда вызывается в фоновом потоке, я бы пропустил проверку и просто перешел к методам Invoke
.
В любом случае я бы переписал метод следующим образом.
private void CheckIfAllModulesInitComplete()
{
MethodInvoker del = delegate {
this._moduleStatusGrid.Invalidate();
if (this._moduleDataList.Count(moduleData => !moduleData.IsInitOver) == 0)
{
this._footprint.DeActivate();
this.Close();
}
};
this.Invoke(del, null);
}