Поскольку текст окна вывода после записи доступен только для чтения, нет простого способа сделать именно то, что вы хотите. Однако сделать нечто подобное легко: добавить строку с отметкой времени после записи нового текста в окно вывода. Это сделает окно вывода намного более беспорядочным, но вы получите свое время.
Вот как это будет работать: сначала создайте надстройку или макрос Visual Studio, которые подключают PaneUpdated активной панели окна Outlook. (См. этот поток, чтобы узнать, как чтобы сделать это с помощью макроса). Обязательно проверьте в обработчике событий это pane.Name == "Debug"
и игнорируйте другие панели. Во-вторых, когда вы обнаружите новый текст на панели вывода отладки, добавьте строку с отметкой времени, например:
public void AddTimestamp(DTE2 dte)
{
// Retrieve and show the Output window.
OutputWindow outWin = dte.ToolWindows.OutputWindow;
pane = outWin.OutputWindowPanes.Item("Debug");
}
catch
{
pane = outWin.OutputWindowPanes.Add("Debug");
}
pane.OutputString("[timestamp: " + DateTime.Now.ToString() + "]\n");
}
Также можно предварительно отложить временную метку для каждой строки, но это намного сложнее. Вы не можете изменить текст, уже находящийся в окне вывода (оно доступно только для чтения), но вы можете очистить окно и добавить текст. Таким образом, вы можете использовать тот же подход обработчика событий, описанный выше, для обнаружения изменений текста, но вместо добавления вы можете скопировать текущий текст, добавить временные метки к любым строкам, которые еще не имеют временных меток, очистить окно и повторно добавить сейчас -with-timestamps текст. Проблема с производительностью при увеличении окна вывода. Таким образом, вам, вероятно, придется реализовать своего рода «ленивую штамповку», которая выполняет очистку и вставку в фоновом режиме, чтобы не убить вашу IDE, когда (как это обычно бывает) за короткое время выводятся 100 строк вывода отладки. . Кроме того, при очистке и повторном добавлении, если вы в данный момент выделяете текст в окне вывода, ваш выбор теряется.
Лично я бы просто сделал простую вещь и добавил бы строки отметок времени, а не более сложный подход с предварительным ожиданием. Поскольку содержимое в конце строки трудно увидеть без прокрутки, я бы, вероятно, позаботился о том, чтобы перед меткой времени была новая строка, чтобы пользователь видел каждый пакет из одной или нескольких строк вывода, за которыми следует одна строка метки времени.
Возможно, есть способ подключить окно вывода до отображения текста, но я не смог найти такой точки расширяемости в API-интерфейсах VS Extensibility.
Еще одна идея: вы всегда можете свернуть собственное окно инструментов, например «Отладка Ivan's Debug Output», которая прослушивает события, поступающие из реального окна вывода, и отображает новые строки (с отметками времени) в вашем собственном окне инструментов. Это, вероятно, самый сложный вариант, но он должен делать именно то, что вы хотите.
person
Justin Grant
schedule
09.11.2009