Openfiledialog在Windows 10上工作正常,但冻结了Windows 7上的Windows应用程序

时间:2018-02-04 04:34:26

标签: c# winforms freeze openfiledialog showdialog

我有windows应用程序,我的程序有以下代码:

Dim fileName As String = "C:\TEMP\json\Main API\Sound.json"

Dim jsonFile As String = File.ReadAllText(fileName)
TextBox2.AppendText(jsonFile)

Dim c As mTest = JsonConvert.DeserializeObject(Of mTest)(jsonFile)
TextBox2.AppendText(c.mName & vbCrLf)

现在,在MainForm()上,我有几个按钮,点击每个按钮,我隐藏MainForm并使用opendialog打开一个新表单(Windows窗体),如下面的代码所示:

static class Program
{
    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new MainForm());
    }
}

现在,在TestCenter表单中,我有一个用于选择文件的功能(OpenFileDialog),如下面的代码所示:

this.Hide();
TestCenter testCenter = new TestCenter();
testCenter.ShowDialog();
this.Show();

我有一个TextBox和一个PictureBox,用于在OpenFileDialog中进行选择后显示文件路径和图像。

奇怪的是,当我从Visual Studio或我的笔记本电脑(Windows 10)上安装的程序运行此程序时,它运行良好,没有任何问题。 但是,当我在客户端计算机(Windows 7)上安装它时,当我单击调用此OpenFileDialog()的按钮时,它会冻结此Windows窗体应用程序。

有人可以帮我解决这个问题吗?

-------- -------- EDIT -------- 18年2月7日

OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "image file |*.jpg;*.png;*.gif";
DialogResult dr = ofd.ShowDialog();
if (dr == DialogResult.Cancel)
    return;
pictureBox_PartImage.Image = Image.FromFile(ofd.FileName);
txt_ImagePath.Text = ofd.FileName;

3 个答案:

答案 0 :(得分:0)

我认为您的代码不是问题所在。我怀疑这是一个安装问题。确保此程序首先运行:

using System;
using System.Windows.Forms;

static class Program
{
    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        OpenFileDialog dlg = new OpenFileDialog();
        dlg.ShowDialog();
    }
}

确保已安装正在使用的正确版本的.NET运行时。

OpenFileDialog会将shell扩展加载到您的应用程序中,如果客户端计算机安装了奇怪的shell扩展,那么它可能会干扰您的应用程序。

答案 1 :(得分:0)

在Windows 7计算机上调试程序以缩小到精确的问题。

  • 使用调试符号编译程序
  • 在Windows 7计算机上安装remote debugging
  • 在Windows 7计算机上启动程序
  • 在开发人员计算机上使用Visual Studio连接到Windows 7机器
  • 在按钮上设置一个断点以暂停代码
  • 以交互方式调试以查看究竟是什么电话挂起

    从那里进一步排查问题,您将获得更多信息。在我为ANYCPU建造之前,我已经看过这个。试试x86进行测试。

答案 2 :(得分:0)

显然,在我的连接字符串中添加OLE DB Services = -1解决了这个问题。

在我的表单中,我使用Access DB Connection从数据库中获取数据。这就是搞乱加载OpenFileDialog的问题。而且,这也解释了为什么示例代码(由Wyck提供)工作正常(因为那里没有使用DB Connection)。

我想知道为什么Vikas4u对this问题(这是我的参考)的答案被否决了。