سلام
تا منظورتون از زیر بار رفتن ، چی باشه . اگه منظورتون اینه که ولو اندک ، از منابع سخت افزار و نرم افزار استفاده کنه ، شما ساده ترین کد را هم اجرا کنید ، باز هم به منابع سخت افزار و نرم افزار برای اجرا نیازمند هست .
اگه منظورتون اینه که سربار استفاده از event viewer و کلاس های مربوط بهش در سی شارپ ، از اینی که مدام در تایمر یه کدی را چک کنیم ، بیشتر یا برابر هست ، قطعا این طور نیست .
از این دست پیام های ویندوز ، بسیار زیاد اتفاق میافته و برنامه های زیادی از پیام های ویندوز استفاده میکنند.
-------------------------------------
به هر حال ، میتونین از این کد استفاده کنین که از استادم (the king) گرفتم (در ویندوز 10 کار میکنه اما در ویندوزهای دیگه را نمیدونم . اگه در ویندوزهای دیگه کارنکنه ، بخاطر ویندوز هست که قابلیت UniversalTelemetryClient را نداره) :
private System.Diagnostics.Eventing.Reader.EventLogWatcher _watcher;
private void button1_Click(object sender, EventArgs e)
{
var query = new System.Diagnostics.Eventing.Reader.EventLogQuery
("Microsoft-Windows-UniversalTelemetryClient/Operational", System.Diagnostics.Eventing.Reader.PathType.LogNam e, "*");
_watcher = new System.Diagnostics.Eventing.Reader.EventLogWatcher (query);
_watcher.EventRecordWritten += Watcher_EventRecordWritten;
_watcher.Enabled = true;
}
private void Watcher_EventRecordWritten(object sender, System.Diagnostics.Eventing.Reader.EventRecordWrit tenEventArgs e)
{
MessageBox.Show(e.EventRecord.FormatDescription()) ;
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
_watcher?.Dispose();
}
در رویداد Watcher_EventRecordWritten ، میتونین برای اون مقدار ID و Message اش که گفته بودم ، شرط بذارین .
البته دقت کنید که سرویس مروط به این کار هم در ویندوز باید فعال باشه تا کد بالا کار کنه .