PacketCommunicator.Break()는 여기서 도움이되지 않습니다. 그것은 전송이 아니라 캡처를 중지하기위한 것입니다. 지금까지 보았 듯이 라이브러리에서 원하는 것을 수행 할 명확한 방법이 없으므로 해결 방법 만 제안합니다. 그들이 도움이되는지 아닌지 확인 - 개발자에게 문의하여이 기능을 요청하십시오.
옵션 1 - 각 패킷을 PacketCommunicator.SendPacket()을 사용하여 루프로 개별적으로 보낼 수 있습니다. 이 속도는 느려지지만 루프의 조건을 수정하여 각 패킷 이후에 중지 할 수 있습니다.
옵션 2 - 당신은
int packetsInBatch = MAX_PACKETS_IN_BATCH;
while (inputCommunicator.ReceivePacket(out packet) == PacketCommunicatorReceiveResult.Ok && packetsInBatch > 0)
{
sendBuffer.Enqueue(packet);
++numPackets;
--packetsInBatch;
}
처럼 무언가로 패킷
변경
while (inputCommunicator.ReceivePacket(out packet) == PacketCommunicatorReceiveResult.Ok)
{
sendBuffer.Enqueue(packet);
++numPackets;
}
의 작은 배치로하지만 사용 PacketCommunicator.Transmit를 보내고 루프를 위해 다른 모든 것을 넣을 수 있습니다. 이렇게하면 일괄 처리가 끝난 후 루프를 중지 할 수 있으며 중지 신호를 보낸 후 속도와 지연 간의 균형을 취하게됩니다.
옵션 3 - 무의미하게 송신 버퍼를 강제 종료하십시오. sendBuffer.Dispose()를 호출하고 그 결과를 처리하십시오.
[HandleProcessCorruptedStateExceptions]
private static void Transmit(PacketCommunicator outputCommunicator, PacketSendBuffer sendBuffer, bool isSync)
{
try
{
outputCommunicator.Transmit(sendBuffer, isSync);
}
catch (Exception e)
{
Console.WriteLine(e);
}
}
당신은 AccessViolationException을 처리해야합니다. HandleProcessCorruptedStateExceptions 속성을 전송을 수행하기 위해 생성 한 새 메소드에 추가하여이 작업을 수행했습니다 (How to handle AccessViolationException 참조). 그것은 내 컴퓨터에서 작동하는 것처럼 보이지만 이것은 실제로 최후의 해결책입니다. 나는 아무것도 테스트하지 않고 가장 간단한 명령 행 유틸리티를 사용하지는 않을 것이다. 관리되지 않는 코드 작업이 진행 중이고이 트릭을 수행 할 때 리소스에 어떤 일이 발생하는지 알지 못합니다.
패킷 중간에서 멈추고 싶습니까? – Vadim
재생 중간에 정지 버튼이 있습니다.이 버튼이 실행되면 즉시 재생을 멈추고 캡처가 완료 될 때까지 기다리지 않으려 고합니다. – user2214609
전송에 대해 묻는 질문이 있습니까? – Vadim