我是编程的初学者,我已经阅读了几个教程。我仍然不清楚以下内容:
单击某个按钮时,该事件会创建一个类的实例:
private void button2_Click(object sender, RoutedEventArgs e)
{
int a = 1;
myClass test = new myClass(a);
}
myClass正在做一个很长的处理工作(几分钟)。如果我在按钮上单击5次,是否会创建5个实例?或者“测试”将被“覆盖”4次?
由于
答案 0 :(得分:8)
如果我在按钮上单击5次,是吗? 要创建5个实例?或者 “test”实例将被“覆盖” 4次?
是的,它将创建5个单独的实例。您正在创建一个在构造之后立即超出范围的对象,因此下次构造同一个类的不同实例时。
我假设您计划将处理作为构造函数的一部分,请记住这将阻止UI线程,您的程序将“冻结” - 如果您希望执行长时间的处理工作,则不应该在UI线程上进行 - 查看即BackgroundWorker。
答案 1 :(得分:3)
它会创建您单击的许多实例。但是,如果工作是同步的并阻止UI线程,则在工作完成之前无法再次单击它。如果您的工作是异步的,那么每次点击都会创建一个新实例。
相反尝试......
private myClass _test;
private void button2_Click(object sender, RoutedEventArgs e)
{
int a = 1;
if (_test == null)
{
_test = new myClass(a);
}
}
虽然,我不建议在UI线程上进行同步工作。