Je suis novice en programmation et je ne peux pas trouver ou savoir ce qu'il faut rechercher pour déboguer le thread démarré avec la méthode SendAsync. Le code fonctionne bien à l'aide de la méthode Send, mais lors de l'utilisation de SendAsync, il passe à waiter.WaitOne() mais je ne reçois jamais le rappel (je pense que c'est ce qu'il appelle) à myPing_PingCompleted. Donc, deux questions comment déboguer le code quand il commence un nouveau thread. J'utilise C# Express donc il ne peut pas avoir tous les outils de débogage comme VS. et n'importe quelle idée où je vais mal dans mon code. MerciAide Ping Class SendAsync
using System;
using System.CodeDom;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;
using System.Net.NetworkInformation;
using System.Threading;
using System.Net;
private void btnPingAsync_Click(object sender, EventArgs e)
{
string bIP = txtStartIP.Text;
string eIP = txtEndIP.Text;
int timeOut;
int cnt = 0;
if (eIP == null) eIP = bIP;
Ping myPing = new Ping();
PingOptions parmPing = new PingOptions();
AutoResetEvent waiter = new AutoResetEvent(false);
myPing.PingCompleted +=new PingCompletedEventHandler(myPing_PingCompleted);
string data = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
byte[] dataBuffer = Encoding.ASCII.GetBytes(data);
if (!int.TryParse(txtTimeOut.Text, out timeOut)) timeOut = 120;
parmPing.DontFragment = true;
parmPing.Ttl = 32;
pbQueueStatus.Minimum = 0;
pbQueueStatus.Step = 10;
pbQueueStatus.Value = 0;
pbQueueStatus.Style = ProgressBarStyle.Continuous;
if (verify.ValidIPAddress(bIP) && verify.ValidIPAddress(eIP))
{
IPQueue = build.IPAddressQueue(bIP, eIP);
pbQueueStatus.Maximum = IPQueue.Count;
pbQueueStatus.TopLevelControl.UseWaitCursor= true;
pbQueueStatus.Visible = true;
while (IPQueue.Count > 0)
{
myPing.SendAsync(IPQueue.Dequeue(), timeOut, dataBuffer, parmPing, waiter);
waiter.WaitOne();
if (++cnt > 10)
{
pbQueueStatus.PerformStep();
cnt = 0;
}
}
}
}
private void myPing_PingCompleted(Object sender, PingCompletedEventArgs e)
{
PingReply reply = e.Reply;
((AutoResetEvent)e.UserState).Set();
if (reply .Status == IPStatus .Success)
{
dosomething;
}
étrange, je l'ai copié l'exemple de l'aide en ligne qui a également échoué .. http://msdn.microsoft.com/en-us/library/ms144962.aspx –
L'aide en ligne msdn pour la classe Ping était ce J'ai utilisé comme guide – DicksGarage