以下のコードを書きました。このメソッドを呼び出して、3つの別々のスレッドを使用して3つの異なるハードディスクに書き込みます。CancelIo呼び出しの1つが失敗しています(falseを返します)。
ディスクは大丈夫だと思います(ハードウェアは問題ありません)。
どうすればいいの?
(ディスクを変更した後、別のディスクで再び発生しているのがわかります。)
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 ) );
}
}
}