121 lines
3.9 KiB
C#
121 lines
3.9 KiB
C#
using System.Configuration;
|
|
using System.Data;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Windows;
|
|
|
|
namespace DrillTools
|
|
{
|
|
/// <summary>
|
|
/// Interaction logic for App.xaml
|
|
/// </summary>
|
|
public partial class App : System.Windows.Application
|
|
{
|
|
protected override void OnStartup(StartupEventArgs e)
|
|
{
|
|
base.OnStartup(e);
|
|
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
|
|
|
|
string? filePath = null;
|
|
if (e.Args.Length > 0)
|
|
{
|
|
filePath = e.Args[0];
|
|
if (!IsValidDrillTapeFile(filePath))
|
|
filePath = null;
|
|
}
|
|
|
|
if (filePath == null)
|
|
{
|
|
ShowMainWindow(null);
|
|
return;
|
|
}
|
|
|
|
// 防止选择窗口关闭后触发 OnLastWindowClose 导致应用退出
|
|
ShutdownMode = ShutdownMode.OnExplicitShutdown;
|
|
|
|
var selectionWindow = new StartupSelectionWindow(filePath);
|
|
selectionWindow.ShowDialog();
|
|
|
|
switch (selectionWindow.SelectedAction)
|
|
{
|
|
case StartupAction.AdjustToolOrder:
|
|
ShutdownMode = ShutdownMode.OnLastWindowClose;
|
|
ShowMainWindow(filePath);
|
|
break;
|
|
case StartupAction.ExportHoleCount:
|
|
PerformHeadlessExport(filePath);
|
|
Shutdown();
|
|
break;
|
|
default:
|
|
Shutdown();
|
|
break;
|
|
}
|
|
}
|
|
|
|
private static void ShowMainWindow(string? filePath)
|
|
{
|
|
try
|
|
{
|
|
MainWindow mainWindow = new MainWindow(filePath);
|
|
mainWindow.Show();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
System.Windows.MessageBox.Show($"创建MainWindow时发生异常:\n{ex.GetType().Name} - {ex.Message}\n\n{ex.StackTrace}",
|
|
"启动失败", MessageBoxButton.OK, MessageBoxImage.Error);
|
|
throw;
|
|
}
|
|
}
|
|
|
|
private static void PerformHeadlessExport(string filePath)
|
|
{
|
|
try
|
|
{
|
|
var viewModel = new MainWindowViewModel();
|
|
|
|
string content = CommandTypeFileReader.ReadAllText(filePath);
|
|
viewModel.OriginalFilePath = filePath;
|
|
viewModel.LoadToolsFromDrillTape(content);
|
|
|
|
if (viewModel.Tools.Count == 0)
|
|
{
|
|
System.Windows.MessageBox.Show("钻带文件中未找到有效的刀具数据,无法导出孔数报表。",
|
|
"提示", MessageBoxButton.OK, MessageBoxImage.Warning);
|
|
return;
|
|
}
|
|
|
|
viewModel.ExportDrillUsageReport();
|
|
}
|
|
catch (OperationCanceledException)
|
|
{
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
System.Windows.MessageBox.Show($"导出孔数报表失败:\n{ex.Message}",
|
|
"错误", MessageBoxButton.OK, MessageBoxImage.Error);
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 验证是否为有效的钻带文件
|
|
/// </summary>
|
|
/// <param name="filePath">文件路径</param>
|
|
/// <returns>是否为有效钻带文件</returns>
|
|
private static bool IsValidDrillTapeFile(string filePath)
|
|
{
|
|
if (string.IsNullOrEmpty(filePath))
|
|
return false;
|
|
|
|
if (!File.Exists(filePath))
|
|
return false;
|
|
|
|
// 检查文件扩展名是否为支持的钻带文件格式
|
|
string extension = Path.GetExtension(filePath).ToLowerInvariant();
|
|
string[] supportedExtensions = { ".txt", ".drl", ".dr2", ".dpin" };
|
|
|
|
return supportedExtensions.Contains(extension);
|
|
}
|
|
}
|
|
}
|