1
私はUSBを初めて使い、バックグラウンドタイマーの実行方法を理解してから、起動時にUSBデバイスから読み取ります。ここで私はそれが期限切れになったとき、私のタイマーや火災方法を開始するために使用していますものです:USBからタイマーを使って読む
void myTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
//ReadUSB();
}
private void wndwMain_ContentRendered(object sender, EventArgs e)
{
USBInit();
if (deviceFound)
{
System.Timers.Timer myTimer = new System.Timers.Timer(1000);
myTimer.Elapsed += new System.Timers.ElapsedEventHandler(myTimer_Elapsed);
myTimer.Start();
}
}
今私はReadUSB()を呼び出したいが、私はEntryPointNotFound例外をスローしています。私はJan AxelsonのUSBのUSBコードを使用しています。私は遅れがUSBのために長すぎることを知っている、私はちょうどテスト目的のためにそれを入れ、私はすべてが動作していることを確認したらそれを減らすだろう。
ReadUSB()で例外:
private void ReadUSB()
{
IntPtr eventObject = IntPtr.Zero;
NativeOverlapped HidOverlapped = new NativeOverlapped();
Byte[] inputReportBuffer = null;
Int32 numberOfBytesRead = 0;
Int32 result = 0;
Boolean success = false;
IntPtr unManagedBuffer = IntPtr.Zero;
IntPtr unManagedOverlapped = IntPtr.Zero;
Array.Resize(ref inputReportBuffer, Capabilities.InputReportByteLength);
eventObject = CreateEvent
(IntPtr.Zero,
false,
false,
String.Empty);
HidOverlapped.OffsetLow = 0;
HidOverlapped.OffsetHigh = 0;
HidOverlapped.EventHandle = eventObject;
unManagedBuffer = Marshal.AllocHGlobal(inputReportBuffer.Length);
unManagedOverlapped = Marshal.AllocHGlobal(Marshal.SizeOf(HidOverlapped));
Marshal.StructureToPtr(HidOverlapped, unManagedOverlapped, false);
readHandle = CreateFile
(devicePathName,
GENERIC_READ,
FILE_SHARE_READ | FILE_SHARE_WRITE,
IntPtr.Zero,
OPEN_EXISTING,
FILE_FLAG_OVERLAPPED,
0);
success = ReadFile
(readHandle,
unManagedBuffer,
inputReportBuffer.Length,
ref numberOfBytesRead,
unManagedOverlapped);
// If ReadFile returned true, report is available. Otherwise, check for completion
if (!success)
{
result = WaitForSingleObject
(eventObject, 3000);
switch (result)
{
case WAIT_OBJECT_0:
success = true;
GetOverlappedResult
(readHandle,
unManagedOverlapped,
ref numberOfBytesRead,
false);
break;
case WAIT_TIMEOUT:
Cancello(readHandle); <-- Exception thrown here.
break;
default:
Cancello(readHandle);
break;
}
}
このメソッドは 'Cancello'ではなく、' CancelIo'と呼ばれます。 –
@RogerLipscombe、これはそうだったようです。答えに入れて、私はそれを受け入れるでしょう。 –
私は、コンパイルエラーを生成しなかったことに驚いていますか? –