我正在使用ReSharper和C#/ VS2010。我正在运行一个单独的线程,需要打开一个表单,在主UI线程上向用户显示一些信息。我的代码就是这个(效果很好):
this.Invoke(new MethodInvoker(delegate()
{
DisplayDownload form2 = new DisplayDownload();
form2.TopMost = true;
form2.Show();
}));
ReSharper希望将其更改为此并且我允许(但以下代码根本不显示该表格):
this.Invoke(new MethodInvoker(delegate()
{
using (var form2 = new DisplayDownload {TopMost = true})
{
form2.Show();
}
}));
表格永远不会再显示ReSharper修改后的代码。如果我回到旧代码,它工作正常。
为什么在ReSharper改变后它不起作用?有人可以向我解释一下导致修改后的代码不再显示表单的原因吗?
答案 0 :(得分:4)
我认为它应该使用USING关键字。考虑到Show()没有阻塞调用,之后程序将使用声明和Dispose()形式调用。
问候。
答案 1 :(得分:2)
在Resharper更改之后它不起作用,因为您在显示它之后处理表单,因此您没有进行更改以使其显示。
然而,Resharper希望将其更改为这种方式,因为您正在方法内创建IDisposable
对象“DisplayDownload
表单”,并在使用完之后“Resharper不知道{{ 1}}方法将保持表单显示..“,您不会丢弃它,但是您应该在类级别声明您的Show()
并且只在您的方法上显示它。像:
DisplayDownload