PDA

View Full Version : مبتدی: مقدار برگشتی تابع کجا باید قرار بگیره؟



kingtak
پنج شنبه 09 آذر 1391, 18:04 عصر
با سلام دوستان من قبلا کدی نوشتم والان میخوام اونو تبدیل به دو قسمت بکنم.یک قسمت مسئول پینگ کرن و قسمت دیگه مسئول نمایش پینگ ها.ولی دستور return تابع دوم خطا میگیره!!

namespace patrPing
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
PingShower();

}

public void PingShower()
{
PingReply replayResult = PingSender();
if (replayResult.Status == IPStatus.Success)
{
listBox1.Items.Add(replayResult.Address.ToString() + " Is Online");
}
}

public PingReply PingSender()
{
IPAddress[] ipList = new IPAddress[5];
ipList[0] = IPAddress.Parse("74.125.225.193");
ipList[1] = IPAddress.Parse("74.125.225.192");
ipList[2] = IPAddress.Parse("174.36.84.92");
ipList[3] = IPAddress.Parse("24.246.192.8");
ipList[4] = IPAddress.Parse("69.55.53.89");

foreach (IPAddress address in ipList)
{
Ping pingSender = new Ping();
PingReply replay = pingSender.Send(address);
}
return replay;
}
}
}



چرا replay رو نمیشناسه؟

یه سوال دیگه:
آیا امکان داده هر متد توسط یک ترد اجرا بشه؟یعنی یک ترد تابع پینگ رو بگردونه و یکیش متد نماش رو؟(قاطی نمیکنه؟)

Farshid007
پنج شنبه 09 آذر 1391, 18:08 عصر
چون تو بلاک foreach تعریف شده
تو بیرن از بلاک به صورت null تعریف کن بعد return کن
بعد اونور چک کن که یه وقت خالی بر نگرده

kingtak
پنج شنبه 09 آذر 1391, 18:45 عصر
نمیدونم منظورتون رو درست متوجه شدم یا نه و لی با این کار فقط یک آی پی نشون داده می شه

public PingReply PingSender()
{
IPAddress[] ipList = new IPAddress[5];
ipList[0] = IPAddress.Parse("74.125.225.193");
ipList[1] = IPAddress.Parse("74.125.225.192");
ipList[2] = IPAddress.Parse("174.36.84.92");
ipList[3] = IPAddress.Parse("24.246.192.8");
ipList[4] = IPAddress.Parse("69.55.53.89");
PingReply replay = null;
foreach (IPAddress address in ipList)
{
Ping pingSender = new Ping();
replay= pingSender.Send(address);
}
if (replay == null)
listBox1.Items.Add("replay is nill");
return replay;
}

Farshid007
پنج شنبه 09 آذر 1391, 19:14 عصر
خب اطلاعات رو باید بریزید تو ارایه بعد return کنید

kingtak
شنبه 11 آذر 1391, 22:44 عصر
چطوری باید آرایه رو پر کنم؟
با این کد دستو return خطا می گیره....

public PingReply PingSender()
{
IPAddress[] ipList = new IPAddress[5];
ipList[0] = IPAddress.Parse("74.125.225.193");
ipList[1] = IPAddress.Parse("74.125.225.192");
ipList[2] = IPAddress.Parse("174.36.84.92");
ipList[3] = IPAddress.Parse("24.246.192.8");
ipList[4] = IPAddress.Parse("69.55.53.89");
PingReply[] ReturnList = new PingReply[5];
foreach (IPAddress address in ipList)
{
Ping pingSender = new Ping();
ReturnList[0] = pingSender.Send(address);
ReturnList[1] = pingSender.Send(address);
ReturnList[2] = pingSender.Send(address);
ReturnList[3] = pingSender.Send(address);
ReturnList[4] = pingSender.Send(address);
}
if (ReturnList == null)
listBox1.Items.Add("replay is null");
return ReturnList;
}
}

plus
شنبه 11 آذر 1391, 22:56 عصر
خروجیش شما از نوع آرایه ست.تایپ خروجی تابع رو درست کنین:


public PingReply[] PingSender()
{
...
...
...
}

kingtak
یک شنبه 12 آذر 1391, 01:13 صبح
95888
اصلا من با این آرایه مشکل دارم.همونطور که می بینید متد فقط آخرین آی پی رو پینگ می کنه.
متد PingShower درسته؟
یه مشکلی هم داره اینه که وقتی می خوام برنامه رو اجرا کنم یه کم(40-30 ثانیه) طول میکشه تا برنامه بالا بیاد.در حالی که من با برنامه های سنگینی کارکردم که را حت اجرا میشن.بنرتون می تونه از دو قسمت بودن تابه باشه؟


public void PingShower()
{
PingReply [] replayResult = PingSender();
foreach (PingReply ShowReplay in replayResult)
{

listBox1.Items.Add(replayResult[0].Address.ToString() + " Is Online");
listBox1.Items.Add(replayResult[1].Address.ToString() + " Is Online");
listBox1.Items.Add(replayResult[2].Address.ToString() + " Is Online");
listBox1.Items.Add(replayResult[3].Address.ToString() + " Is Online");
listBox1.Items.Add(replayResult[4].Address.ToString() + " Is Online");

}
}

public PingReply [] PingSender()
{
IPAddress[] ipList = new IPAddress[5];
ipList[0] = IPAddress.Parse("74.125.225.193");
ipList[1] = IPAddress.Parse("74.125.225.192");
ipList[2] = IPAddress.Parse("174.36.84.92");
ipList[3] = IPAddress.Parse("24.246.192.8");
ipList[4] = IPAddress.Parse("69.55.53.89");
PingReply[] ReturnList = new PingReply[5];
foreach (IPAddress address in ipList)
{
Ping pingSender = new Ping();
ReturnList[0] = pingSender.Send(address);
ReturnList[1] = pingSender.Send(address);
ReturnList[2] = pingSender.Send(address);
ReturnList[3] = pingSender.Send(address);
ReturnList[4] = pingSender.Send(address);
}
if (ReturnList == null)
listBox1.Items.Add("replay is null");
return ReturnList;
}
}

Mahmoud.Afrad
یک شنبه 12 آذر 1391, 06:06 صبح
به اینصورت بنویس:
public void PingShower()
{
PingReply[] replayResult = PingSender();
if (replayResult == null)
{
listBox1.Items.Add("replay is null");
}
else
{
foreach (PingReply ShowReplay in replayResult)
{
if (ShowReplay.Status == IPStatus.Success)
{
listBox1.Items.Add(ShowReplay.Address + "\t" + ShowReplay.Status);
}
}
}
}

public PingReply[] PingSender()
{
IPAddress[] ipList = new IPAddress[5];
ipList[0] = IPAddress.Parse("74.125.225.193");
ipList[1] = IPAddress.Parse("74.125.225.192");
ipList[2] = IPAddress.Parse("174.36.84.92");
ipList[3] = IPAddress.Parse("24.246.192.8");
ipList[4] = IPAddress.Parse("69.55.53.89");

PingReply[] ReturnList = new PingReply[ipList.Length];

for (int i = 0; i < ReturnList.Length; i++)
{
Ping pingSender = new Ping();
ReturnList[i] = pingSender.Send(ipList[i]);
}

return ReturnList;
}