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

标签 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改了之后就不行了?有人可以向我解释一下是什么导致修改后的代码不再显示表单吗?

最佳答案

我相信这是由于 USING 关键字造成的。考虑到Show()不是阻塞调用,之后程序就离开了调用形式的using语句和Dispose()。

问候。

关于c# - 为什么我的 ReSharper 修改后的 form.Show() 代码不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6888397/

相关文章:

c# - .Net Controls DataSource 属性上的缺失行为

c# - 如何启动一个停止的线程

java - 新线程中的 KeyListener 用于捕获游戏输入

c# - c# 中的简化 "for loop"语法

c# - 以编程方式从 wpf 应用程序打开 winform

c# - 使用 C# 中的 Google map API 和 SSIS 包获取行驶距离

c# - 使用 SemaphoreSlim 限制对共享变量的访问是否可以保证所有写入都可见?

java - 如何在没有任何阻塞的情况下在 Java 8 中执行依赖任务

c# - 是否有任何从 IEnumerable 获得的包装对象类? (TreeView 中的 ItemsSource)

c# - web.config中的Processmodel配置