Question
Je fais
static bool isWorking
{
get { return _isWorking; }
set {
myform.treeView1.Enabled = !value;
_isWorking = value;
}
}
et pas à pas à travers le débogueur montre qu'il arrête à la première ligne de consigne. Après avoir essayé cette ligne à la place
set { myform.treeView1.Enabled = !(_isWorking = value); }
Je vois que isWorking est défini, mais myform.treeView1.Enabled n'est pas. Ce qui se passe?
La solution
Que voulez-vous dire par « le débogueur montre qu'il arrête »? Est-il possible que myform
est nulle, ou myform.treeView1
est nulle?
Je ne me souviens pas exactement ordre d'évaluation dans ce cas, mais il pourrait expliquer les symptômes que vous décrivez. Savoir pourquoi le débogueur « arrête » est cruciale si. Une autre possibilité est que vous essayez d'accéder à l'interface d'un fil non-UI, ce qui empêcherait la cession à Enabled
de fonctionner correctement.
Oh, et s'il vous plaît ne pas utiliser votre deuxième version - affectation comme effet secondaire est très, très rarement une bonne idée. L'utilisation que je sais est idiomatiques lors de la boucle avec IO:
string line;
while ( (line = reader.ReadLine()) != null)
et je considère seulement acceptable parce qu'il est raisonnablement commun. Dans ce cas, il ressemble vraiment vous peut signifie "==" au lieu de "=".
Autres conseils
Parce que (_isWorking = valeur) retourne toujours vrai. Si vous écrivez:
myform.treeView1.Enabled = !(_isWorking == value);
Il fonctionne comme: si isWorking est égale à la valeur puis désactivez treeView. Mais en vous cas - pas