winforms 单击URL或打印按钮时,Chm文件冻结应用程序

inkz8wg9  于 12个月前  发布在  其他
关注(0)|答案(3)|浏览(104)

当我从Windows窗体应用程序打开帮助文件时,我正在使用此代码。

public static void ShowHelp(string constant)
    {
        Help.ShowHelp(dummyFormForHelp.Value, CHMFile, HelpNavigator.Topic, constant);
    }

字符串
它工作正常,除了当我点击去>网址.或打印按钮在帮助文件。[

我没有收到任何消息,应用程序和chm文件根本没有响应。我需要去任务管理器并杀死进程。我不知道这是什么。
我试图打开相同的文件使用相同的代码从简单的Windows窗体应用程序只有一个窗体和一切都是完美的。所以我认为我的应用程序有问题。
什么会导致这样的问题?这是一个有很多屏幕的大型企业应用程序。

l2osamch

l2osamch1#

打开CHM的代码片段似乎不干净(?dummyFormForHelp.Valueconstant)。Help.ShowHelp()就像是一个 Package 器, Package 了好的旧HTMLHelp API调用(另见:HTMLHelp API - VBA, VB6 und VB2003)。参数有点顽固。
另一个想法-请阅读HTMLHelp API - HH_CLOSE ALL注解并交叉检查您的代码。由于HH API中存在错误,请确保在主窗体的Query_Unload事件中调用此事件,而不是OnClose。
请使用如下所示的正确参数调用Help.ShowHelp()函数。

Help.ShowHelp(this, CHMFile, HelpNavigator.Topic, "foobar.htm");

字符串
x1c 0d1x的数据
从我的示例应用程序截图上面所有的以下代码是为我工作。请尝试为您的需求。打开URL是特殊的,在这里,而不是在您的截图(URL...)显示的一个。

#region mnuHelp ---------------------------------------------

private void mnuHelpContents_Click(object sender, EventArgs e)
{
    //--- Show contents of help file.
    Help.ShowHelp(this, helpProviderMain.HelpNamespace);
}

private void mnuHelpIndex_Click(object sender, EventArgs e)
{
    //--- Show index of help file.
    Help.ShowHelpIndex(this, helpProviderMain.HelpNamespace);
}

private void mnuHelpSearch_Click(object sender, EventArgs e)
{
    //--- Show search tab of help file.
    Help.ShowHelp(this, helpProviderMain.HelpNamespace, HelpNavigator.Find);
}

private void mnuHelpTest_Click(object sender, EventArgs e)
{
    //--- Show a web site with help content.
    Help.ShowHelp(this, "http://www.stackoverflow.com");
}

private void mnuHelpOpenTopicByName_Click(object sender, EventArgs e)
{
    //--- Open topic by name.
    Help.ShowHelp(this, helpProviderMain.HelpNamespace, HelpNavigator.Topic, "Garden/tree.htm");
}

private void mnuHelpOpenTopicById_Click(object sender, EventArgs e)
{
    //--- Open topic by ID.
    Help.ShowHelp(this, helpProviderMain.HelpNamespace, HelpNavigator.TopicId, "20010");
}

#endregion -----------------------------------------------

编辑:

下载并运行MJ的诊断工具。
MJ's Diagnostics是一个小工具,报告所有HTML帮助运行时和车间(编译器)DLL是否安装并注册到正确的位置。如果您有编译器崩溃,并且在打开CHM时崩溃,或者在CHM搜索选项卡中搜索时崩溃,那么这个工具将帮助解决rouge DLL问题。

6l7fqoea

6l7fqoea2#

首先问题描述得不太清楚:

  • 应该提到的是,chm文件是由NuHelp生成的(这是临时解决方案,但我们都知道临时总是永久的,对吧?))
  • dummyFormForHelp.Value在这里什么也没说,它只是表单的惰性初始化示例,以防止帮助窗口位于最顶端,并允许在应用程序和帮助之间切换

dummyFormForHelp.Value表示:

private static readonly Lazy<Form> dummyFormForHelp = new Lazy<Form>(() =>
{
    var form = new Form();
    form.CreateControl();
    return form;
});

字符串
返回WinForms <> CHM帮助的原始问题:

  • 仅当应用程序打开帮助时才会出现问题,如果帮助是直接打开的-完全没有问题
  • 当导航到URL,打印或在搜索选项卡中键入任何世界时,100%陷入无限循环

研究表明,冻结应用程序和打开chm的问题并不是唯一的:

解决问题的方法:

  • 尝试NuHelp的最新版本
  • 尝试不同的转换器,并检查它是否可以帮助
  • 不要使用任何转换器和生成帮助文件对自己的
  • 作为不同进程启动帮助
  • 以不同进程启动帮助 *:

hh被添加到windows路径中,这样的命令可以很容易地执行:

hh "help.chm::/topic.html"

hh "help.chm::/topic.html#subtopic"

hh -mapid 12345 help.chm


解决方法的缺点:每次从应用程序调用帮助都将打开新的帮助示例。

    • 编辑:28/08/2017**

对于未来的读者:

  • 用不同的常用转换器重新编译没有帮助
  • 帮助是用帮助和手册重新创建的,
  • 已返回索引,关键字已正确配置,搜索已返回
  • 使用了hh调用

现在帮助按预期工作。

htzpubme

htzpubme3#

这是Windows 10的一个错误,已在Windows 10 v1607/build 14393中修复。
它至少在Windows 10,v1507/build 10240和v1511/build 10586中存在。(我为这个主题创建了一个Connect issue,但不幸的是,该网站无法访问了。)

相关问题