3

我最近升级到 VS 2012。我有一组在 VS 2010 中编写的编码 UI 测试,我正在尝试在 VS 2012 中启动它们。我有一个在开始时显示的 Windows 窗体使用 AssemblyInitialize 属性运行测试。我使用此表单允许用户从一组值中进行选择,这些值用于为测试提供数据。这是显示表单的代码副本:

[AssemblyInitialize]
public static void AssemblyInitialize(TestContext context)
{
    ProcessUtility.TerminateAll();
    if (!File.Exists(Directory.GetCurrentDirectory() + @"\RunInfo.ser"))
    {
        InitializeForm initForm = new InitializeForm();
        initForm.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
        initForm.ShowDialog();
    }
}

所以,这让我很头疼:表单在运行模式下显示得很好。但是,如果我尝试在调试模式下启动它,它永远不会显示。我已经逐步完成了代码。它正在加载表单的所有控件,没有错误。我进入了“initForm.ShowDialog()”代码行。它运行那行代码,但没有任何反应。我没有收到任何错误,IDE 左下角的状态是“就绪”。几乎就好像 IDE 认为表单已显示,但事实并非如此。我已经仔细检查了任务管理器,它只是不存在。我已验证构建配置设置为调试。我已经尝试清理解决方案并重新构建。此代码在 VS 2010 中继续工作。请告诉我有人遇到了类似的问题,因为我没有想法。我' 我是stackoverflow的新手,所以让我知道我是否可以提供其他任何东西来更好地解释这个问题。预先感谢您查看它。

4

4 回答 4

3

不知道为什么这个解决方案有效,但我能够在 VS2013 中解决这个问题,方法是在调用 ShowDialog 之前将我试图显示的表单上的可见属性设置为 true,然后设置为 false。

VB.Net 示例代码

Dim form as Form = new Form
form.Visible = True
form.Visible = False
form.ShowDialog
于 2017-04-17T17:06:16.530 回答
2

我能够使用以下代码而不是 ShowDialog 来显示表单。我仍然不知道为什么 ShowDialog 不起作用,但这可以解决问题:

InitializeForm initForm = new InitializeForm();
initForm.Visible = true;
initForm.Focus();
Application.Run(initForm);
于 2013-08-07T19:41:10.563 回答
1

初始化期间最有可能发生异常,进入Debug->Exceptions下拉菜单并确保选中复选框thrownCommon Language Runtime Exceptions这将使您的代码中断正在发生的异常。

在此处输入图像描述

如果您仍然没有发现异常,请Debug->Option and Settings取消选中框Enable Just My Code并选中框Break when exceptions cross AppDomain or managed/native boundries

在此处输入图像描述

这可能会给您一些“阅读鲱鱼”异常,因为某些 .NET 进程使用异常来控制流逻辑。所以请注意,您看到的第一个异常可能不是问题的原因。

于 2013-07-30T19:45:58.360 回答
0

我在调试旧代码时遇到了同样的事情,并通过[STAThread]在容器方法的顶部添加属性来解决这种情况,其中包含form.ShowDialog(); 例如:

[STAThread]
public void MessageBoxShow(string errorMessage)
{
    using (frmError errorForm = new frmError(errorMessage))
    {
        errorForm.ShowDialog();
    }
}

这解决了在持续调试点时发生的任何挂起。平台 Windows 7 x64 企业版和 VS2008(截至今天都有最新更新)。

希望这可以帮助。

更新 1:请忽略using示例中的语句,因为我使用的是自定义表单,它继承IDisposable了 Windows.Form 并具有自定义处置例程。抱歉,如果它造成了任何混乱。

于 2016-09-20T09:55:39.543 回答