Возможные Дублировать:
Stop running the code after 15 secondsПрекратить код после периода времени
Я имею дело с кодом анализатор пакетов, и я просто хочу, чтобы сделать некоторые изменения к нему. Теперь я пытаюсь отредактировать его, так что, как только я запустил программу, он будет захватывать пакеты всего 15 секунд. Ниже приведена часть кода, которая перехватывает пакеты, и, как вы можете видеть, я имею дело с Try/Catch/Throw и работает как цикл.
public void Start() {
if (m_Monitor == null)
{
try
{
m_Monitor = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.IP);
m_Monitor.Bind(new IPEndPoint(IP, 0));
m_Monitor.IOControl(SIO_RCVALL, BitConverter.GetBytes((int)1), null);
m_Monitor.BeginReceive(m_Buffer, 0, m_Buffer.Length, SocketFlags.None, new AsyncCallback(this.OnReceive), null);
}
catch
{
m_Monitor = null;
throw new SocketException();
}
}
}
/// <summary>
/// Stops listening on the specified interface.
/// </summary>
public void Stop() {
if (m_Monitor != null) {
m_Monitor.Close();
m_Monitor = null;
}
}
/// <summary>
/// Called when the socket intercepts an IP packet.
/// </summary>
/// <param name="ar">The asynchronous result.</param>
///
private void OnReceive(IAsyncResult ar) {
try
{
int received = m_Monitor.EndReceive(ar);
try
{
if (m_Monitor != null)
{
byte[] packet = new byte[received];
Array.Copy(Buffer, 0, packet, 0, received);
OnNewPacket(new Packet(packet));
}
}
catch { } // invalid packet; ignore
m_Monitor.BeginReceive(Buffer, 0, Buffer.Length, SocketFlags.None, new AsyncCallback(this.OnReceive), null);
}
catch
{
Stop();
}
}
Как вы думаете, я могу изменить этот код так, что он будет остановлен сразу начинается после 15 секунд, например? Я попытался использовать DateTime, но он не был успешным, и я не мог разбить этот так называемый цикл.
ну, это расширенный вопрос ... Меня попросили открыть еще один вопрос ... – iSi
@iSi Можете ли вы добавить код, который на самом деле вызывает 'Start()' –