事件处理程序 C# 中的共享变量
Shared variable within event handlers C#
我创建了一个自定义文本框,当输入来自 RFID reader(使用 HID ID 定义)时,它能够不接受输入。我有 HID ID,我有两个事件,我有要设置的 属性,但它不起作用。
代码如下:
public partial class STextBox : TextBox
{
private RawInput _kblistener;
private bool _handle = false;
public STextBox()
{
_allowRfid = false;
_kblistener = new RawInput(Handle, true);
_kblistener.KeyPressed += _kblistener_KeyPressed;
}
private void _kblistener_KeyPressed(object sender, RawInputEventArg e)
{
if (e.KeyPressEvent.DeviceName == Config.RFIDreader) Handling = true;
else Handling = false;
}
private bool Handling
{
get { return _handle; }
set { _handle = value; }
}
protected override void OnKeyPress(KeyPressEventArgs e)
{
e.Handled = Handling;
base.OnKeyPress(e);
}
}
问题是:第一个触发事件是_kblistener_KeyPressed,它在需要时将Handling 设置为true,但是当代码到达OnKeyPress 时,Handling 始终为false。我正在使用 RawInput_dll 获取 HID ID。
好的。所以感谢 Hans Passant,我发现问题出在非静态变量上。
在我将 _kblistener
和 _handle
更改为静态后,一切都开始正常工作,正如我预期的那样。
这是工作代码:
public partial class STextBox : TextBox
{
private bool _allowRfid;
private static RawInput _kblistener;
private static bool _handle = false;
public STextBox()
{
_allowRfid = false;
_kblistener = new RawInput(Handle, true);
_kblistener.KeyPressed += _kblistener_KeyPressed;
}
private void _kblistener_KeyPressed(object sender, RawInputEventArg e)
{
if (e.KeyPressEvent.DeviceName == SetUp.RfidDevID) Handling = true;
else Handling = false;
}
public bool AllowRFID
{
get { return _allowRfid; }
set { _allowRfid = value; }
}
private static bool Handling
{
get { return _handle; }
set { _handle = value; }
}
protected override void OnKeyPress(KeyPressEventArgs e)
{
if (!_allowRfid) e.Handled = Handling;
base.OnKeyPress(e);
}
}
我创建了一个自定义文本框,当输入来自 RFID reader(使用 HID ID 定义)时,它能够不接受输入。我有 HID ID,我有两个事件,我有要设置的 属性,但它不起作用。
代码如下:
public partial class STextBox : TextBox
{
private RawInput _kblistener;
private bool _handle = false;
public STextBox()
{
_allowRfid = false;
_kblistener = new RawInput(Handle, true);
_kblistener.KeyPressed += _kblistener_KeyPressed;
}
private void _kblistener_KeyPressed(object sender, RawInputEventArg e)
{
if (e.KeyPressEvent.DeviceName == Config.RFIDreader) Handling = true;
else Handling = false;
}
private bool Handling
{
get { return _handle; }
set { _handle = value; }
}
protected override void OnKeyPress(KeyPressEventArgs e)
{
e.Handled = Handling;
base.OnKeyPress(e);
}
}
问题是:第一个触发事件是_kblistener_KeyPressed,它在需要时将Handling 设置为true,但是当代码到达OnKeyPress 时,Handling 始终为false。我正在使用 RawInput_dll 获取 HID ID。
好的。所以感谢 Hans Passant,我发现问题出在非静态变量上。
在我将 _kblistener
和 _handle
更改为静态后,一切都开始正常工作,正如我预期的那样。
这是工作代码:
public partial class STextBox : TextBox
{
private bool _allowRfid;
private static RawInput _kblistener;
private static bool _handle = false;
public STextBox()
{
_allowRfid = false;
_kblistener = new RawInput(Handle, true);
_kblistener.KeyPressed += _kblistener_KeyPressed;
}
private void _kblistener_KeyPressed(object sender, RawInputEventArg e)
{
if (e.KeyPressEvent.DeviceName == SetUp.RfidDevID) Handling = true;
else Handling = false;
}
public bool AllowRFID
{
get { return _allowRfid; }
set { _allowRfid = value; }
}
private static bool Handling
{
get { return _handle; }
set { _handle = value; }
}
protected override void OnKeyPress(KeyPressEventArgs e)
{
if (!_allowRfid) e.Handled = Handling;
base.OnKeyPress(e);
}
}