मेरे पास एक एप्लिकेशन है जो मेरे डेटाग्रिड को हर बार अपडेट करता है एक लॉग फ़ाइल जिसे मैं देख रहा हूं वह अद्यतन हो जाती है (निम्नलिखित में नए पाठ के साथ जोड़ा गया):
private void DGAddRow(string name, FunctionType ft)
{
ASCIIEncoding ascii = new ASCIIEncoding();
CommDGDataSource ds = new CommDGDataSource();
int position = 0;
string[] data_split = ft.Data.Split(' ');
foreach (AttributeType at in ft.Types)
{
if (at.IsAddress)
{
ds.Source = HexString2Ascii(data_split[position]);
ds.Destination = HexString2Ascii(data_split[position+1]);
break;
}
else
{
position += at.Size;
}
}
ds.Protocol = name;
ds.Number = rowCount;
ds.Data = ft.Data;
ds.Time = ft.Time;
dataGridRows.Add(ds);
rowCount++;
}
...
private void FileSystemWatcher()
{
FileSystemWatcher watcher = new FileSystemWatcher(Environment.CurrentDirectory);
watcher.Filter = syslogPath;
watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite
| NotifyFilters.FileName | NotifyFilters.DirectoryName;
watcher.Changed += new FileSystemEventHandler(watcher_Changed);
watcher.EnableRaisingEvents = true;
}
private void watcher_Changed(object sender, FileSystemEventArgs e)
{
if (File.Exists(syslogPath))
{
string line = GetLine(syslogPath,currentLine);
foreach (CommRuleParser crp in crpList)
{
FunctionType ft = new FunctionType();
if (crp.ParseLine(line, out ft))
{
DGAddRow(crp.Protocol, ft);
}
}
currentLine++;
}
else
MessageBox.Show(UIConstant.COMM_SYSLOG_NON_EXIST_WARNING);
}
जब फ़ाइलवॉचर के लिए ईवेंट उठाया जाता है, क्योंकि यह एक अलग थ्रेड बनाता है, जब मैं dataGridRows चलाने की कोशिश करता हूं। जोड़ें (डीएस); नई पंक्ति जोड़ने के लिए, प्रोग्राम केवल डिबग मोड के दौरान दी गई किसी चेतावनी के बिना क्रैश हो जाता है।
Winforms में, यह आसानी से Invoke फ़ंक्शन का उपयोग करके हल किया गया था, लेकिन मुझे यकीन नहीं है कि WPF में इस बारे में कैसे जाना है।