2015-06-15 52 views
2

我是新來的StackOverflow和一般的編程,所以如果我沒有正確解釋事情,提前很抱歉。'System.StackOverflowException'發生在WindowsBase.dll中

我收到錯誤消息:

類型 'System.StackOverflowException' 未處理的異常發生在WindowsBase.dll

時,下面的代碼獲取到window.Show()

出現這種情況
public MainWindow() 
    { 
     myApp.Common.AppInfo.Local = "en-GB"; 

     SoftwareMaintenance.Seed(); 

     myApp5Db.Init(typeof(myAppDb_SQL2008)); 
     myAppDb.Init(); 

     if (myAppDb.IsValid) 
     { 
      Node.LoadTree(Node.ROOT); //loading the first level only 
     } 

     InitializeComponent(); 
    } 

protected override void OnStartup(StartupEventArgs e) 
    { 
     DefaultTraceListener traceListener = new DefaultTraceListener(); 

     PresentationTraceSources.Refresh(); 
     PresentationTraceSources.DataBindingSource.Listeners.Add(traceListener); 
     PresentationTraceSources.DataBindingSource.Switch.Level = SourceLevels.Error; 


     base.OnStartup(e); 


     if (true) 
     { 
      MainWindow window = new MainWindow(); 
      window.Show(); 
     } 

    } 

現在我已經在網絡上做了大量的研究,一切都指向一個被卡住的循環。在我的情況下,我不認爲這是事實,因爲另一個開發人員機器可以正常運行代碼。

這臺電腦與HP EliteBook 8670p完全一樣,只是內存更大。我的一個8GB的,其他16GB的[這可能是這個原因嗎?]

軟件方面都運行Windows 8.1 x64,Visual Studio 2013.每臺機器上的SQL Server的不同,我的機器運行SQL Server 2012開發人員版,其他SQL Server 2008標準。

// The Call Stack after window.Show() 

[Managed to Native Transition] 

// First 3 Call Stack's showed once 

WindowsBase.dll!MS.Win32.SafeNativeMethods.GetKeyboardLayout(int dwLayout) 
PresentationCore.dll!System.Windows.Input.TextServicesManager.PostProcessInput(object sender, System.Windows.Input.ProcessInputEventArgs e) 
PresentationCore.dll!System.Windows.Input.InputManager.RaiseProcessInputEventHandlers(System.Windows.Input.ProcessInputEventHandler postProcessInput, System.Windows.Input.ProcessInputEventArgs processInputEventArgs) 

// The next 9 lines are repeated over 20+ times 

PresentationCore.dll!System.Windows.Input.InputManager.ProcessStagingArea() 
PresentationCore.dll!System.Windows.Input.KeyboardDevice.TryChangeFocus(System.Windows.DependencyObject newFocus, System.Windows.Input.IKeyboardInputProvider keyboardInputProvider, bool askOld, bool askNew, bool forceToNullIfFailed) 
PresentationCore.dll!System.Windows.Input.KeyboardDevice.Focus(System.Windows.DependencyObject focus, bool askOld, bool askNew, bool forceToNullIfFailed) 
PresentationCore.dll!System.Windows.Input.KeyboardDevice.Focus(System.Windows.IInputElement element) 
InfragisticsWPF4.Controls.Interactions.XamDialogWindow.v14.1.dll!Infragistics.Controls.Interactions.XamDialogWindow.DialogManager.XamDialogWindow_LostKeyboardFocus(object sender, System.Windows.Input.KeyboardFocusChangedEventArgs e) 
PresentationCore.dll!System.Windows.RoutedEventArgs.InvokeHandler(System.Delegate handler, object target) 
PresentationCore.dll!System.Windows.EventRoute.InvokeHandlersImpl(System.Windows.DependencyObject sender, System.Windows.RoutedEventArgs args, bool reRaised) 
PresentationCore.dll!System.Windows.UIElement.RaiseEventImpl(System.Windows.DependencyObject sender, System.Windows.RoutedEventArgs args) 
PresentationCore.dll!System.Windows.UIElement.RaiseTrustedEvent(System.Windows.RoutedEventArgs args) 
+0

我只是想添加一個WPF項目,在.NET 4.5上。 –

+5

什麼方法是'window.Show();'in?從上面的片段看來,它看起來像是在任何方法之外。 – ClickRick

+1

您需要顯示'if(true)'塊所在的方法。此外,來自異常的堆棧跟蹤的副本應該會有所幫助 –

回答

2

StackOverflowException結果不是當循環卡住了,而是一個方法調用自己的次數過多。這被稱爲遞歸。它也可能是由相互遞歸引起的,在這種遞歸中,兩個或多個方法在重複的連續中互相調用。

如果使用new運算符創建新MainWindow實例的代碼片段被MainWindow構造函數中調用的某個方法調用,或者通過其中一個方法調用的任何方法調用,則可能會發生這種情況。我會懷疑這些行之一:

myApp5Db.Init(typeof(myAppDb_SQL2008)); 
myAppDb.Init(); 

但其他行可能是罪魁禍首。

如果您發佈的應用程序的Main方法,它可能會提供一些線索,正如由主窗口的構造函數調用的方法的代碼,並在你的while (true)環定義的完整方法。

另一個想法:如果您在調試器中檢查調用堆棧,那麼在發生異常的地方,您應該很快找到發生遞歸的地方。

+0

謝謝phoog,我提供了這個方法。並且將在調試器中運行調用堆棧 –

+0

這是window.Show()的斷點處列表中唯一的調用堆棧() > myApp.View.exe!myApp.View.App.OnStartup(System.Windows.StartupEventArgs e)137行\t C# 在window.Show()被調用後,錯誤出現,'調用堆棧與外部代碼'有一些行似乎重複..我會張貼他們在另一個評論希望這有助於 –

+0

嗨,我已經添加了來自window.Show()行後面的調用堆棧 –

0

//重複了20+次

PresentationCore.dll中!System.Windows.Input.InputManager.ProcessStagingArea() PresentationCore.dll中!System.Windows.Input.KeyboardDevice接下來的9條線。 TryChangeFocus(System.Windows.DependencyObject 則newFocus,System.Windows.Input.IKeyboardInputProvider keyboardInputProvider,布爾askOld,布爾askNew,布爾 forceToNullIfFailed) PresentationCore.dll中!System.Windows.Input.KeyboardDevice.Focus(System.Windows.DependencyObject 焦點,bool askOld,bool askNew,bool forceToNullIfFiled) PresentationCore.dll!System.Windows.Input.KeyboardDevice.Focus(System.Windows.IInputElement element) InfragisticsWPF4.Controls.Interactions.XamDialogWindow.v14.1.dll!Infragistics。Controls.Interactions.XamDialogWindow.DialogManager.XamDialogWindow_LostKeyboardFocus(對象 發件人,System.Windows.Input.KeyboardFocusChangedEventArgs E) PresentationCore.dll中!System.Windows.RoutedEventArgs.InvokeHandler(System.Delegate 處理程序,對象目標) PresentationCore.dll中! System.Windows.EventRoute.InvokeHandlersImpl(System.Windows.DependencyObject sender,System.Windows.RoutedEventArgs args,bool reRaised) PresentationCore.dll!System.Windows.UIElement.RaiseEventImpl(System.Windows.DependencyObject sender,System.Windows .RoutedEventArgs參數 PresentationCore.dll!System.Windows.UIElement.RaiseTrustedEvent(System.Windows.RoutedEventArgs args)

如果我猜我會說,你必須有一個被樹視圖/節點的每個節點上觸發的關鍵事件,聚焦於在XamDialogWindow_LostKeyboardFocus事件中的代碼...

相關問題