USB デバイス ターミナルを表すフォームがあり、エラーが発生しています。未知のソースで奇妙なエラーを半日デバッグした後、インスタンス化されているが表示されていない場合、ターミナルが機能しないことがどういうわけかわかりました。コードを変更して usbTerminal.Show(); を追加すると、正常に動作します。
USBTerminal usbTouchTerminal;
public MainForm()
{
InitializeComponent();
USBSettings usbTouchSettings = new USBSettings();
usbTouchTerminal = new USBTerminal(usbTouchSettings); //Create Terminal with settings
usbTouchTerminal.StartUSB();
usbTouchTerminal.Show(); //works ONLY when show is here
}
これはどのように可能であり、その理由は何ですか? 大規模な検索を行ったのですが、ターミナルまたはメイン フォームの .Visible プロパティに依存するコードはありませんか?
一部のフォームが表示されない場合に機能しない理由について、私は完全に困惑しています。MSDN や Google もあまり役に立ちませんでした。インスタンス化されたときに正しく機能することは確かでしたが、表示されませんでした。
PS。追加した
usbTerminal.Show();
usbTerminal.Hide();
ターミナルは正しく機能しました。
助けてくれてありがとう!
編集:
また、この usbTerminal は WndProc オーバーライドを使用していることにも注意してください。私はそれについての専門家ではありませんが、何か関係があるのではないかと感じています。
これは LibUSBdotnet であることに注意してください
public class USBSettings
{
/// <summary>
/// This is the Vender ID Number. (0x0B6A)
/// </summary>
public ushort VID { get; set; }
/// <summary>
/// This is the Product ID Number. (0x5346)
/// </summary>
public ushort PID { get; set; }
/// <summary>
/// This is the optional Serial Name. ("")
/// </summary>
public string SerialName { get; set; }
/// <summary>
/// This is the Reader USB Endpoint. (ReadEndpointID.Ep02)
/// </summary>
public ReadEndpointID ReaderEndpoint { get; set; }
/// <summary>
/// This is the Writer USB Endpoint. (WriteEndpointID.Ep01)
/// </summary>
public WriteEndpointID WriterEndpoint { get; set; }
/// <summary>
/// This is the Registry Key for USB settings. ("SOFTWARE\\DEFAULT\\USBPROPERTIES")
/// </summary>
public string SubKey { get; set; }
/// <summary>
/// This is the default read buffer size for the USB Device.
/// </summary>
public int ReadBufferSize { get; set; }
/// <summary>
/// This constructor houses default values for all properties.
/// </summary>
public USBSettings()
{
VID = 0x0B6A;
PID = 0x5346;
SerialName = "";
ReaderEndpoint = ReadEndpointID.Ep02;
WriterEndpoint = WriteEndpointID.Ep01;
SubKey = "SOFTWARE\\DEFAULT\\USBPROPERTIES";
ReadBufferSize = 100;
}
}