https://azure.microsoft.com/en-us/documentation/articles/app-insights-windows-desktop/
Microsoft 提供的有关如何将 Application Insights 添加到 Windows 窗体应用程序的官方链接。从链接:
在 Azure 中 - portal.azure.com
- 创建应用程序资源。 ::新/开发人员服务/应用程序洞察力。
- 注意生成的检测密钥,获取一份副本并将其放在一边,我们在配置您的应用程序时将需要它。
在您的应用程序中
- NuGet - 添加“Application Insights API”
- 配置您的
TelemetryClient。
我在 WPF 应用程序中使用 MvvmCross,在启动时我创建了一个 TelemetryClient,我在整个应用程序中重复使用。
var telemetryClient = new TelemetryClient();
telemetryClient.InstrumentationKey = "your key here from Azure";
telemetryClient.Context.Session.Id = Guid.NewGuid().ToString();
telemetryClient.Context.User.AccountId = Username;
telemetryClient.Context.Component.Version = Settings.Default.Version;
telemetryClient.TrackEvent("Application Start");
Mvx.RegisterSingleton<TelemetryClient>(telemetryClient);
- 记录事件/屏幕/异常等
任何时候“发生某事”,我都会解决TelemetryClient 并记录该事件。这与跟踪和记录方面的任何其他 Application Insights 实现一样。
举个例子-
//Resolve the telemetry client
readonly TelemetryClient telemetryClient = Mvx.Resolve<TelemetryClient>();
//Record a page View with some extra information
var pageviewTelemetry = new PageViewTelemetry("Observations");
pageviewTelemetry.Properties.Add("Breadcrumb", breadcrumb);
telemetryClient.TrackPageView(pageviewTelemetry);
//Track an event
var eventTelemetry = new EventTelemetry("Observation Saved");
eventTelemetry.Properties.Add("Saved Observation", observation);
telemetryClient.TrackEvent(eventTelemetry);
//Track an exception
try
{
// do work here
}
catch (Exception ex)
{
telemeteryClient.TrackException(ex);
}
- 应用程序退出时刷新
适用于 Windows 桌面应用程序的 Application Insights 不会自动收集/发送任何内容。作为开发人员,需要在应用程序退出时强制刷新。
private void PowerButton_OnClick(object sender, RoutedEventArgs e)
{
var tc = Mvx.Resolve<TelemetryClient>();
if (null != tc)
{
tc.Flush(); // only for desktop apps
}
Application.Current.Shutdown();
}
或者设置一个 RxTimer 按计划刷新...我决定每 30 分钟刷新一次:
var observable = Observable.Interval(new TimeSpan(0, 0, 30, 0));
observable.Subscribe(_ => Application.Current.Dispatcher.Invoke(new Action(() =>
{
var tc = Mvx.Resolve<TelemetryClient>();
if (null != tc)
{
tc.Flush(); // only for desktop apps
Console.WriteLine("Flush TC");
}
})));
仅供参考 - 从 Application Insights API NuGet 包的 0.17.0 开始,如果您处于脱机状态,则刷新调用不会挂起,但似乎会挂起。在线时,通话立即完成,离线时,通话完成前会停顿 5 秒。