C# C语言中的Getter/Setter问题#

C# C语言中的Getter/Setter问题#,c#,setter,C#,Setter,我在做什么 static bool isWorking { get { return _isWorking; } set { myform.treeView1.Enabled = !value; _isWorking = value; } } 单步执行调试器显示它在第一个设置行停止。 在试过这句话之后 set { myform.treeView1.Enabled = !(_isWor

我在做什么

static bool isWorking
    {
        get { return _isWorking; }
        set {
            myform.treeView1.Enabled = !value;
            _isWorking = value;
        }
    }
单步执行调试器显示它在第一个设置行停止。 在试过这句话之后

set { myform.treeView1.Enabled = !(_isWorking = value); }
我看到已设置isWorking,但未启用myform.treeView1.Enabled。发生了什么事?

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

我记不起这个病例的确切评估顺序,但它可以解释你描述的症状。但是,了解调试器“停止”的原因至关重要。另一种可能是您试图从非UI线程访问UI,这将阻止分配到
已启用的
的任务正常工作

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

string line;
while ( (line = reader.ReadLine()) != null)
我认为这是可以接受的,因为这是合理的。在本例中,您的意思可能是“==”而不是“=”

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

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

它的工作原理如下:如果isWorking等于value,则禁用treeView。但是在您的情况下-no

调试器停止=您得到一个异常?是
myform
静态的吗?我假设
\u isWorking
也是静态的。你说得对,我试图在非UI线程中访问UI。我切换了顺序,并正确设置了“正在工作”。我从来没有注意到这一点,除非你在非UI线程中提到UI->System.Windows.Forms.dll中发生了“System.Threading.ThreadAbortException”类型的第一次意外异常。否,(\u isWorking=value)将值赋给\u isWorking并返回值(或_isWorking,现在是相同的),因此如果值为false,(\u isWorking=value)返回false。