PDA

View Full Version : استفاده از backgroundworker برای نمایش سیستم های فعال در شبکه



salehsam
شنبه 28 دی 1392, 00:37 صبح
سلام دوستان
میخوام کل سیستم های فعال در شبکه رو نشون بدم
این کار مدتی زمان میبره و در طی این مدت که اصطلاحا پینگ گرفته میشه برنامه هنگ میکنه!
جستجو کردم فهمیدم باید از backgroundworker استفاده کنم!
ولی بلد نیستم
ممنون میشم راهنمایی کنین

mousa1992
شنبه 28 دی 1392, 01:04 صبح
سلام
ی سرچ بزن تو سایت اموزش های زیادی در مورد کار کردن با این component هست (مطالب خیلی ساده هست و براحتی متوجهشون میشی)
مختصرا توضیح میدم و توضیحات تکمیلی رو خودتون مطالعه کنید
این component سه رویداد داره! DoWork و ProgressChanged و Completed
خب شما کدهایی رو که قراره به صورت غیرهمگام اجرا کنید رو در رویداد DoWork قرار میدید ( که در مورد کار شما میشه همون ping گرفتن ها )
در رویداد DoWork نتایج حاصله از کارتون رو با استفاده از متد ReportProgress به رویداد ProgressChanged میفرستید و در این رویداد هم با استفاده از پارامتر e مقادیر ارسالی رو از DoWork دریافت میکنید و نمایش میدید و یا هر چیز دیگه ... (e.ProgressPercentage , e.UserState)

چندتا نکته هست که طی مطالعه Backgroundworker ها متوجه میشه


موفق باشی

دلتنگ اسمان
شنبه 28 دی 1392, 09:11 صبح
این لینک (http://barnamenevis.org/showthread.php?436681-%D8%AF%D8%A7%D9%86%D9%84%D9%88%D8%AF-%DA%A9%D9%86%DB%8C%D8%AF-%D9%85%D8%AB%D8%A7%D9%84-%D8%B9%D9%85%D9%84%DB%8C-%D8%A7%D8%B2-Background-Worker-%D9%88-ProgressBar&p=1954259#post1954259)رو ببین

salehsam
شنبه 28 دی 1392, 09:39 صبح
ممنون دوستان
ولی هر کار میکنم نمیتونم کدش رو بنویسم!
کد اصلی من اینه:


System.Diagnostics.Process pr = new System.Diagnostics.Process();
System.Diagnostics.ProcessStartInfo pstart = new System.Diagnostics.ProcessStartInfo("cmd.exe");
pstart.CreateNoWindow = true;
//pstart.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
pstart.UseShellExecute = false;
pstart.RedirectStandardOutput = true;
pstart.RedirectStandardInput = true;
pr.StartInfo = pstart;
pr.Start();
System.IO.StreamReader reader = pr.StandardOutput;
System.IO.StreamWriter writer = pr.StandardInput;
writer.WriteLine("net view");
writer.Close();

this.listBox1.Items.Clear();
while (!reader.EndOfStream)
{
string line = reader.ReadLine();
if (line.StartsWith("\\"))
{
line = line.Replace("\\", "");
this.listBox1.Items.Add(line);
}
}
pr.WaitForExit();
pr.Close();

}

mousa1992
شنبه 28 دی 1392, 09:53 صبح
سلام
مطالعه کردین در مورد Backgroundworker ؟
تمام کدهایی که بررسی میکنن ایا سیستم با شبکه در تعامل هست رو در رویداد DoWork قرار میدین تا این کارها همزمان با اجرای برنامه انجام بشن (به صورت غیر همگام )
و انتهای پروسه نتیجه رو با استفاده از متد ReportProgress گزارش میدین ( بالا توضیح دادم )
لازمه کار اینکه که در مورد backgroundworker ها مطالعه کنید

ی مثال پیوست کردم

در صورتی که بخواین حین انجام کار در DoWork گزارشی رو ارسال کنید باید خاصیت WorkerReportsProgress رو true کنید