|
using AddInPlugin.Util;
|
using AddInPlugin;
|
using Microsoft.Win32;
|
using OpenTap.Addin.Listener;
|
using OpenTap.Addin.Reader;
|
using OpenTap.Addin.Util;
|
using OpenTap.Addin;
|
using OpenTap;
|
using System.Collections.ObjectModel;
|
using System.Threading;
|
using System;
|
using System.Windows;
|
|
namespace TestSeq
|
{
|
public class Net47Getter : IRegGetter
|
{
|
public string GetAppPath(string keyPath)
|
{
|
using (RegistryKey key = Registry.CurrentUser.OpenSubKey(keyPath))
|
{
|
if (key == null)
|
{
|
throw new Exception("注册表不存在,请先运行一次编辑器");
|
}
|
|
string value = key.GetValue("Location")?.ToString();
|
if (string.IsNullOrEmpty(value))
|
{
|
throw new Exception("注册表不存在,请先运行一次编辑器");
|
}
|
return value;
|
}
|
}
|
}
|
|
/// <summary>
|
/// Interaction logic for MainWindow.xaml
|
/// </summary>
|
public partial class MainWindow : Window
|
{
|
public const int MaxLogCount = 1000;
|
|
private readonly ObservableCollection<string> _logItems = new ObservableCollection<string>();
|
|
public MainWindow()
|
{
|
RegUtil.Register(new Net47Getter());
|
StationGlobalsManager.Register(new DefaultStationGlobalsManager());
|
VariableResolverFactory.Register(new DefaultVariableResolverFactory());
|
InitializeComponent();
|
LogListView.ItemsSource = _logItems;
|
}
|
|
private void self_Closing(object sender, System.ComponentModel.CancelEventArgs e)
|
{
|
tapThread?.Abort();
|
tapThread = null;
|
AppendLog("已停止");
|
}
|
|
/// <summary>
|
/// 打开按钮:选择 *.TestPlan 文件,并将路径显示在 PathTextBlock 中。
|
/// </summary>
|
private void OpenButton_Click(object sender, RoutedEventArgs e)
|
{
|
var dlg = new OpenFileDialog
|
{
|
Title = "选择 TapPlan 文件",
|
Filter = "TapPlan 文件 (*.TapPlan)|*.TapPlan|所有文件 (*.*)|*.*",
|
CheckFileExists = true,
|
Multiselect = false
|
};
|
|
if (dlg.ShowDialog(this) == true)
|
{
|
PathTextBlock.Text = dlg.FileName;
|
}
|
}
|
|
private TapThread tapThread;
|
|
// TODO: 执行按钮逻辑,由你自己编写
|
private void RunButton_Click(object sender, RoutedEventArgs e)
|
{
|
_logItems.Clear();
|
var uiMessageHandler = PostUIMessageHandler.Get();
|
uiMessageHandler.OnPostUIMsg += UiMessageHandler_OnPostUIMsg;
|
TestPlan plan = TestPlanReader.ReadTestPlan(PathTextBlock.Text);
|
|
tapThread = TapThread.Start(() =>
|
{
|
ResultSettings.Current.Add(uiMessageHandler);
|
var run = plan.Execute(ResultSettings.Current, null, null, null);
|
});
|
AppendLog($"执行{PathTextBlock.Text}...");
|
}
|
|
// TODO: 停止按钮逻辑,由你自己编写
|
private void StopButton_Click(object sender, RoutedEventArgs e)
|
{
|
tapThread?.Abort();
|
tapThread = null;
|
AppendLog("已停止");
|
}
|
|
/// <summary>
|
/// 追加一行日志到日志区域,可在任意线程调用。
|
/// </summary>
|
public void AppendLog(string message)
|
{
|
if (!Dispatcher.CheckAccess())
|
{
|
Dispatcher.Invoke(() => AppendLog(message));
|
return;
|
}
|
|
string line = $"[{DateTime.Now:HH:mm:ss}] {message}";
|
_logItems.Add(line);
|
while (_logItems.Count > MaxLogCount)
|
{
|
_logItems.RemoveAt(0);
|
}
|
LogListView.ScrollIntoView(_logItems[_logItems.Count - 1]);
|
}
|
|
private void UiMessageHandler_OnPostUIMsg(object sender, PostUIMsg e)
|
{
|
AppendLog($"string:{e.StringData} bool:{e.BoolData} number:{e.NumberData}");
|
}
|
}
|
}
|