private void Count()
{
lock (this)
// {
for (int i = 0; i < 10000; i++)
{
int num = int.Parse(tBox1.Text.Trim());
num++;
tBox1.Text = num.ToString();
}
// }
}
https://msdn.microsoft.com/zh-cn/library/c5kehkcz(VS.80).aspx
通常,应避免锁定 public 类型,否则实例将超出代码的控制范围。常见的结构 lock (this)、lock (typeof (MyType)) 和 lock ("myLock") 违反此准则
不要写 lock(this)
而应该定义一个object
object lockobj = new object();
lock (lockobj)
{
...
}
我把注释的{}去掉运行结果没区别
没有{}只管下面一行,因为你lock包裹的只有for循环,for循环后面没有别的语句,所以就你的程序而言,没有区别。
但是 lock(this) 本身是错的
程序有问题,不是括号的问题
另外,如果count()是在非UI线程运行
tBox1.Text = num.ToString();
应该放在委托:
this.Invoke(() => { tBox1.Text = num.ToString(); });
并且这段代码不要放在lock里