当控件遇到错误时,应用程序会在重用qlickview ocx控件时挂起

时间:2013-05-11 05:40:06

标签: c# .net controls ocx qlikview

我的申请表有两种形式

  • 1)主要表格
  • 2)信息中心表格

我在“Dashboard Form”上使用了qlickview ocx控件,然后使用此控件打开我的QVW文件,一切正常 ....

但是如果我打开的QVW文档在重新加载时遇到错误或者换句话说我的OCX控件遇到了问题,当我尝试重新打开“Dashboard Form”时我的应用程序将挂起并打开一个QVW文件。

步骤:

  1. 打开申请
  2. 创建“仪表板表单”的实例并将其显示为
  3. 通过“Dashboard Form”
  4. 上的OCX控件打开QVW文档
  5. 火灾重装命令
  6. 重新加载时发生错误
  7. 关闭“信息中心表单”
  8. 创建“仪表板表单”的实例并将其显示为
  9. 尝试通过“仪表板表格”上的OCX控件打开QVW文档(以前的文档或其他文档)
  10. 申请暂挂
  11. 当我关闭仪表板表单时,我对以前的问题是如何生效感到困惑,当我重用ocx控件时,它会引起新的更大问题。

1 个答案:

答案 0 :(得分:0)

当OCX和网络失去焦点时,它们通常表现得很奇怪。

使用OCX时,请使用此

/// <summary>
    /// Loading the QV document and a retry when we have missed contact with the qv document.
    /// </summary>
    private void LoadQvIfNecessary(bool forceDocumentReload =false)
    {
        Parent.Text = DateTime.Now.ToLongTimeString();
        if (forceDocumentReload)
            axQlikMainApp.DocName = null;
        if (axQlikMainApp.ActiveDocument == null)
            axQlikMainApp.DocName = Loader.Instance.Settings.QlikViewPlanningDocumentPath;
            Thread.Sleep(100);
        if (axQlikMainApp.ActiveDocument == null)
        {
            DialogResult result = Logger.ShowMessage("Du har tappat kontakten med databasen.\nVill du återuppta kontakten med databasen?\nOm du väljer ”Avbryt” stängs programmet ned.","Tappat kontakt",Logger.MessageLevel.CriticalError,MessageBoxButtons.RetryCancel);
            if (result == DialogResult.Cancel)
                Environment.Exit(0);
            for (int i = 0; i < 10; i++)
            {
                Thread.Sleep(300);
                Application.DoEvents();
            }

            LoadQvIfNecessary();
        }
    }

这是一个丑陋的混蛋,但这确实有效。 问题是当你访问它。我使用表单焦点事件来检查它。

此外,我还有一个用于重新加载文档的手动按钮。