2016-11-08 172 views
0

我正在努力與這一個。爲什麼DocData.LoadDocData中的異常不會阻止視圖打開?

我有一個Visual Studio包,它註冊了一個自定義編輯器工廠來創建自定義文檔數據和自定義文檔視圖。

在DocData中,在LoadDocData方法中,當我創建文檔時,如果打開的文件已損壞,則會引發InvalidOperationException。

這裏的問題是,我不想打開相應的視圖,但Visual Studio顯示錯誤消息,但它仍然打開視圖。

這裏有什麼問題?

protected override int LoadDocData(string fileName, bool isReload) 
{ 
    // Clear errors 

    this.DocumentData.ClearErrorListItems(); 

    // Catch errors 

    try 
    { 
     base.LoadDocData(fileName, isReload); // InvalidOperationException raised here 
    } 
    catch (Exception) 
    { 
     if (this.DocumentData.ErrorListProvider != null) 
     { 
      this.DocumentData.ErrorListProvider.ShowErrorOnIdle(); 
     } 

     throw; 
    } 

    return VSConstants.S_OK; 
} 

感謝您的幫助!

+0

能否請您提供一個完整的演示通過OneDrive。我們會重現您的問題。 –

+0

我發現了這個問題。問題是在DocData.LoadDocData中有一個循環,它關閉了鍵入到ModelingDocView的文檔視圖的框架,但我的視圖不是ModelingDocView的子類。 –

+0

您可以發佈答案並將其標記爲答案。 –

回答

0

這裏的問題是我的自定義文檔視圖不是ModelingDocView的子類。

我發現,通過分析DocSplit.LoadDocData中的源代碼與ILSpy,它只關閉從ModelingDocView派生的視圖。

public int LoadDocData(string fileName) 
{ 
    this.codeMarkers.CodeMarker(8206); 
    this.OnDocumentLoading(EventArgs.Empty); 
    try 
    { 
     this.LoadDocData(fileName, false); 
    } 
    catch (Exception ex) 
    { 
     if (CriticalException.IsCriticalException(ex)) 
     { 
      throw; 
     } 
     this.HandleLoadDocDataException(fileName, ex, false); 
     foreach (ModelingDocView current in new List<ModelingDocView>(this.DocViews)) 
     { 
      if (current != null) 
      { 
       ErrorHandler.ThrowOnFailure(current.Frame.CloseFrame(65792u)); 
      } 
     } 
     return 0; 
    } 
    this.loaded = true; 
    this.OnDocumentLoaded(EventArgs.Empty); 
    this.codeMarkers.CodeMarker(8207); 
    return 0; 
} 
相關問題