private void Thread_Start(object obj) { ThreadParameter parameter = (ThreadParameter)obj; DTE2 application = parameter.Application; CSqlOptions settings = parameter.CSqlOptions; OutputPaneTraceListener traceListener = null; try { var outputPane = Gui.Output.GetAndActivateOutputPane(application); if (outputPane != null) { outputPane.Clear(); traceListener = new OutputPaneTraceListener(outputPane); } if (traceListener != null) { Trace.Listeners.Add(traceListener); } this.currentExecutor = new ScriptExecutor(settings); this.currentExecutor.Execute(); if (!String.IsNullOrEmpty(settings.DistributionFile)) { application.ItemOperations.OpenFile(settings.DistributionFile, Constants.vsViewKindCode); } currentExecutor = null; } finally { currentExecutor = null; if (traceListener != null) { Trace.Listeners.Remove(traceListener); traceListener.Close(); traceListener.Dispose(); } } Commands2 commands = application.Commands as Commands2; if (commands != null) { commands.UpdateCommandUI(false); } }