我是WPF的新手,正在构建一个测试应用程序。在我的应用程序中,我有一个用户控件,它正在调用另一个类来从设备捕获指纹。从设备捕获指纹的类正在do while循环上运行,该循环不断地从设备读取。我想介绍一个可以打破做的事件。在我的用户控件中,我可以捕获KeyDown事件。但是捕获指纹的类无法捕获按键。我错过了什么?
This is my Sample File.Xaml.cs code
protected override void OnKeyDown(KeyEventArgs e)
{
if (e.Key == Key.LeftCtrl || e.Key == Key.RightCtrl)
{
}
else
base.OnKeyDown(e);
}
private void button_Click(object sender, RoutedEventArgs e)
{
TNTFMT220 tntFmt220 = new TNTFMT220();
string fingerPrintId = "";
var data = tntFmt220.ContiniousCaptureFingerPrint(ref fingerPrintId);
}
这是我捕获指纹的代码
public bool ContiniousCaptureFingerPrint(ref string FingerPrintScanned)
{
do
{
//get data from device
} while(dataReturned);
return true;
}
答案 0 :(得分:-1)
UserControl由一个窗口和一个类组成,当UserControl窗口被聚焦并且您按一个键时,您可以获得一个OnKeyDown事件。
我认为你的TNTFMT220
类没有窗口,所以你可以在UserControl或主窗口中生成事件并以不同的方式将它传播到类中,我建议你做几个:
类属性
protected override void OnKeyDown(KeyEventArgs e)
{
if (e.Key == Key.LeftCtrl || e.Key == Key.RightCtrl)
{
tntFmt220.doStop= true;
}
else
base.OnKeyDown(e);
}
private TNTFMT220 tntFmt220;
private void button_Click(object sender, RoutedEventArgs e)
{
tntFmt220 = new TNTFMT220();
string fingerPrintId = "";
var data = tntFmt220.ContiniousCaptureFingerPrint(ref fingerPrintId);
}
类方法
protected override void OnKeyDown(KeyEventArgs e)
{
if (e.Key == Key.LeftCtrl || e.Key == Key.RightCtrl)
{
tntFmt220.DoStop();
}
else
base.OnKeyDown(e);
}
private TNTFMT220 tntFmt220;
private void button_Click(object sender, RoutedEventArgs e)
{
tntFmt220 = new TNTFMT220();
string fingerPrintId = "";
var data = tntFmt220.ContiniousCaptureFingerPrint(ref fingerPrintId);
}
最重要的是:
首先,我可能会再次考虑是否需要do while
,或者TNTFMT220
是否可以在读取数据时生成事件。
然后,如果你不希望do While
阻止你的窗口,你必须在另一个线程中运行它。