2

我在做

static bool isWorking
    {
        get { return _isWorking; }
        set {
            myform.treeView1.Enabled = !value;
            _isWorking = value;
        }
    }

并且单步调试器显示它在第一行停止。在尝试这条线之后

set { myform.treeView1.Enabled = !(_isWorking = value); }

我看到 isWorking 已设置,但 myform.treeView1.Enabled 未设置。这是怎么回事?

4

2 回答 2

9

“调试器显示它停止”是什么意思?它可能myform是空的,还是myform.treeView1空的?

在这种情况下,我不记得确切的评估顺序,但它可以解释您所描述的症状。不过,了解调试器“停止”的原因至关重要。另一种可能性是您尝试从非 UI 线程访问 UI,这将阻止分配Enabled正常工作。

哦,请不要使用您的第二个版本 - 作为副作用,分配是非常非常罕见的好主意。我知道的唯一惯用用法是使用 IO 循环时:

string line;
while ( (line = reader.ReadLine()) != null)

我只认为这是可以接受的,因为它相当普遍。在这种情况下,看起来您意思是“==”而不是“=”。

于 2009-04-02T08:57:35.713 回答
-2

因为 (_isWorking = value) 总是返回 true。如果你要写:

myform.treeView1.Enabled = !(_isWorking == value);

它的工作原理如下:如果 isWorking 等于值,则禁用 treeView。但在你的情况下 - 不

于 2009-04-02T08:59:05.833 回答