using Microsoft.Win32; using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; namespace LogAnalyzer { /// /// MainWindow.xaml 的交互逻辑 /// public partial class MainWindow : Window { private readonly LogParserService _parser; private DataTable resultTable; public MainWindow() { InitializeComponent(); _parser = new LogParserService(); } private void BtnLoadLog_Click(object sender, RoutedEventArgs e) { // 1. 打开文件选择对话框 OpenFileDialog openFileDialog = new OpenFileDialog(); openFileDialog.Filter = "文本文件 (*.txt)|*.txt|所有文件 (*.*)|*.*"; openFileDialog.Title = "请选择染整设备日志文件"; if (openFileDialog.ShowDialog() == true) { try { TxtStatus.Text = "正在解析..."; // 强制UI刷新状态文本 LogDataGrid.UpdateLayout(); // 2. 调用服务解析文件 // 注意:如果文件非常大,建议使用异步 Task.Run 避免界面卡顿 resultTable = _parser.ParseLogFile(openFileDialog.FileName); //DataTable resultTable1 = _parser.ExtractDatabaseCommandsWithContext(resultTable,1); // 3. 绑定数据到 DataGrid // DataTable 的 DefaultView 实现了 IBindingList,适合直接绑定 LogDataGrid.ItemsSource = resultTable.DefaultView; //LogDataGrid1.ItemsSource = resultTable1.DefaultView; TxtStatus.Text = $"解析完成,共加载 {resultTable.Rows.Count} 条记录。"; } catch (Exception ex) { MessageBox.Show($"发生错误: {ex.Message}", "错误", MessageBoxButton.OK, MessageBoxImage.Error); TxtStatus.Text = "加载失败"; } } } private void Button_Click(object sender, RoutedEventArgs e) { DataTable resultTable1 = _parser.ExtractDatabaseCommandsWithContext(resultTable, 1); LogDataGrid1.ItemsSource = resultTable1.DefaultView; } private void Button_Click1(object sender, RoutedEventArgs e) { DataTable resultTable1 = _parser.ExtractTank1CommandsWithContext(resultTable); LogDataGrid1.ItemsSource = resultTable1.DefaultView; } private void Button_Click2(object sender, RoutedEventArgs e) { DataTable resultTable1 = _parser.ExtractTank2CommandsWithContext(resultTable); LogDataGrid1.ItemsSource = resultTable1.DefaultView; } private void Button_Click3(object sender, RoutedEventArgs e) { DataTable resultTable1 = _parser.ExtractTank3CommandsWithContext(resultTable); LogDataGrid1.ItemsSource = resultTable1.DefaultView; } private void Button_Click4(object sender, RoutedEventArgs e) { DataTable resultTable1 = _parser.ExtractTank4CommandsWithContext(resultTable); LogDataGrid1.ItemsSource = resultTable1.DefaultView; } } }