我正在开发一个 C#/WPF 中的小型应用程序,该应用程序由串行端口的数据提供。它还读取包含一些常量的文本文件以计算某些内容。当数据到达时,事件处理程序用于处理传入的数据:
_serialPort.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(Receive);
这是 Receive 处理程序,以及在 Dispatcher 中创建的委托,用于进一步更新 UI。
private delegate void UpdateUiTextDelegate(string text);
private void Receive(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
// collect characters received to our 'buffer' (string)
try
{
// stops long running output timer if enabled
if (dispatcherTimer.IsEnabled)
{
dispatcherTimer.Stop();
}
message = _serialPort.ReadLine();
dispatcherTimer.Start();
Dispatcher.Invoke(DispatcherPriority.Send, new UpdateUiTextDelegate(updateUI), message);
}
catch (Exception ex)
{
// timeout
dispatcherTimer.Start();
SerialCmdSend("SCAN");
}
}
dispatcherTimer
如果它未能在合理的时间内获取任何数据,则允许重新向串行线路上的单元发送命令。
除了从文本文件中读取之外,该应用程序在主窗口的构造函数中定义了一些键盘快捷键手势:
public MainWindow()
{
InitializeComponent();
InitializeComponent();
KeyGesture kg = new KeyGesture(Key.C, ModifierKeys.Control);
InputBinding ib = new InputBinding(MyCommand, kg);
this.InputBindings.Add(ib);
Start();
}
所以 MainWindow.xaml 有这个命令绑定代码:
<Window.CommandBindings>
<CommandBinding Command="{x:Static custom:MainWindow.MyCommand}"
Executed="MyCommandExecuted"
CanExecute="CanExecuteMyCommand" />
</Window.CommandBindings>
Visual Studio Designer 抱怨标记无效,但仍然可以正常运行,直到我在运行程序时开始收到这些错误:
PresentationFramework.dll 中出现“System.Windows.Markup.XamlParseException”类型的未处理异常
附加信息:'对与指定绑定约束匹配的'Vaernes.MainWindow'类型的构造函数的调用引发了异常。行号“4”和行位置“9”。
进行小的代码更改后会出现这种错误。最新的是将程序读取的文本文件替换为另一个同名的文件(添加现有项目...)。我在网上搜索了一些解决方案,但找不到与我的问题非常相似的任何解决方案。
我怀疑它与 Dispatcher 线程或输入绑定有关。我还尝试为异常添加处理程序,并注意到发件人是 System.Windows.Threading.Dispatcher。
建议任何人?