Опитвам се да получа подробности от регистъра на събитията въз основа на избора на елемент в списъчно поле. Опитвах се да поставя подробностите в текстово поле. Не успях да намеря решение сам. Това, което направих, и е изключително бавно, е повтаряне през регистъра на събитията и намиране на съвпадение с индекса на журнала, след което показване на съобщението, но това отнема много време. Има ли много по-бърз начин да стигнете директно до конкретния запис в дневника въз основа на индекса на дневника. Използвам WPF и C#.
private void backgroundWorker2_DoWork(object sender, DoWorkEventArgs e)
{
EventLog eventLog1 = new EventLog();
eventLog1.Log = "System";
foreach (System.Diagnostics.EventLogEntry entry in eventLog1.Entries)
{
var newEntry = entry.Index + " - " + entry.EntryType + " - " + entry.TimeWritten + " - " + entry.Source;
backgroundWorker2.ReportProgress(0, newEntry);
}
}
void backgroundWorker2_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
var newEntry = (string)e.UserState;
MainWindow.Instance.Dispatcher.BeginInvoke(new Action(delegate() { MainWindow.Instance.listBox1.Items.Add(newEntry); }));
}
И това добавя всеки елемент към списъка с индекса на елемента, след което преминавам и извличам индекса:
private void listBox1_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
string p1 = listBox1.SelectedItem.ToString();
string[] id = Regex.Split(p1, @"([\s])");
label1.Content = id[0];
EventLog el = new EventLog();
el.Log = "System";
foreach (System.Diagnostics.EventLogEntry entry in el.Entries)
{
if (entry.Index.ToString() == id[0])
{
label1.Content = entry.Message;
}
}
}
Цикълът foreach е това, което причинява увисването в потребителския интерфейс, но дори и да го настроя на друга нишка, както направих, докато добавях елементите към списъчното поле, пак ще отнеме известно време, за да премина през всичко, за да получа точен индекс търся. Така че това, което наистина искам да направя, е просто да отида направо до този индекс и да взема съобщението, вместо да обикалям целия списък, търсейки го.