为什么我的ReSharper修改了form.Show()代码不起作用?

时间:2011-07-31 08:38:28

标签: c# winforms multithreading resharper


我正在使用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改变后它不起作用?有人可以向我解释一下导致修改后的代码不再显示表单的原因吗?

2 个答案:

答案 0 :(得分:4)

我认为它应该使用USING关键字。考虑到Show()没有阻塞调用,之后程序将使用声明和Dispose()形式调用。

问候。

答案 1 :(得分:2)

在Resharper更改之后它不起作用,因为您在显示它之后处理表单,因此您没有进行更改以使其显示。

然而,Resharper希望将其更改为这种方式,因为您正在方法内创建IDisposable对象“DisplayDownload表单”,并在使用完之后“Resharper不知道{{ 1}}方法将保持表单显示..“,您不会丢弃它,但是您应该在类级别声明您的Show()并且只在您的方法上显示它。像:

DisplayDownload