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。