diff --git a/src/Main/Base/Project/Src/Services/ParserService/ParserService.cs b/src/Main/Base/Project/Src/Services/ParserService/ParserService.cs index b05529665a..b40190b51f 100644 --- a/src/Main/Base/Project/Src/Services/ParserService/ParserService.cs +++ b/src/Main/Base/Project/Src/Services/ParserService/ParserService.cs @@ -366,6 +366,14 @@ namespace ICSharpCode.SharpDevelop } } + public static void StartAsyncParse(string fileName, string fileContent) + { + ThreadPool.QueueUserWorkItem( + delegate { + ParseFile(fileName, fileContent); + }); + } + public static void StartParserThread() { abortParserUpdateThread = false; diff --git a/src/Main/Base/Project/Src/TextEditor/Gui/Editor/SharpDevelopTextAreaControl.cs b/src/Main/Base/Project/Src/TextEditor/Gui/Editor/SharpDevelopTextAreaControl.cs index d184961719..c1332944d0 100644 --- a/src/Main/Base/Project/Src/TextEditor/Gui/Editor/SharpDevelopTextAreaControl.cs +++ b/src/Main/Base/Project/Src/TextEditor/Gui/Editor/SharpDevelopTextAreaControl.cs @@ -327,6 +327,8 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor if (ccBinding.HandleKeyPress(this, ch)) return false; } + if (ch == '\n') + StartDelayedReparse(); } } catch (Exception ex) { LogException(ex); @@ -336,6 +338,22 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor return false; } + bool startedDelayedReparse; + + void StartDelayedReparse() + { + if (startedDelayedReparse) + return; + startedDelayedReparse = true; + WorkbenchSingleton.SafeThreadAsyncCall( + delegate { + startedDelayedReparse = false; + if (!this.IsDisposed) { + ParserService.StartAsyncParse(this.FileName, this.Document.TextContent); + } + }); + } + public void StartCtrlSpaceCompletion() { foreach (ICodeCompletionBinding ccBinding in CodeCompletionBindings) {