私は以下のコードを書いています。私は3つの別々のスレッドを使用して3つの異なるハードディスクに書き込むためにこのメソッドを呼び出しています。 CancelIo呼び出しの1つが失敗しています(falseを返します)。CancelIo関数が失敗するのはなぜですか?
私は、ディスクが(ハードウェアで結構です)OKであることを前提としています。
これはどのようにすることができますか?
(ディスクを変更した後、私はそれが別のディスクに再び起こって参照してください。)未解決のIOが存在しない場合
public void foo(byte[] bufferToWrite)
{
unsafe
{
NativeOverlapped overlapped = new NativeOverlapped()
{
EventHandle = eventHandle,
OffsetLow = (int)(s & 0xffffffff),
OffsetHigh = (int)(s >> 32 & 0xffffffff)
};
GCHandle gch = GCHandle.Alloc(bufferToWrite, GCHandleType.Pinned);
IntPtr ptr = new IntPtr((void*)gch.AddrOfPinnedObject());
WriteFile(handle, ptr, length, ref bytesWritten, &overlapped);
dwResult = WaitForSingleObject(EventHandle, 30000);
if(dwResult== TIME_OUT)
{
Debug.Assert(CancelIo (handle));
}
}
}
これは間違いのようになります。 ''場合(bResult == ERROR_SUCCESS == || bResult == ERROR_IO_PENDING)?? – hmjd
@ChrisFは、自分自身... – hmjd
男...それだけで綴りましたバグ..注力:) – Yanshof