ad hoc
پنج شنبه 02 دی 1395, 11:14 صبح
با سلام حدمت دوستان عزیز
یک برنامه ساده را مثال می زنم خدمتتان که با Parallel.For موازی سازی شده و جالب اینجاست که تا وقتی از MessageBox.Show جهت نمایش پیغام استفاده شود، درست کار می کند اما با حذف آن نتایج چاپ شده در تکست باکس خروجی تکراری می شود
Parallel.For(0, allPairs, j =>
{
MessageBox.Show("j is :"+j); متن این مسیج باکس هر چیزی می تواند باشد ، مهم اینجاست که تا وقتی این مسیج باکس هست برنامه درست کار می کند
Tagging(j);
});
private void Tagging( int PairNumber)
{
Random R = new Random();
int Random1 , Random2;
Random1 = R.Next(0, 100000);
// یک عدد تصادفی تولید می شود
if ((Random1 % 2 == 0) || (Random1 % 5 == 0)) StateF[(PairNumber)] = "G";
if ((Random1 % 3 == 0) || (Random1 % 5 == 0)) StateF[(PairNumbe )] = "L";
else StateF[(PairNumber)] = "S";
// براساس اینکه عدد تصادفی مان چه بوده است، یک برچسب ایجاد می شود ، S ،L یا G
کار برنامه هم که مشخصه . به شکل تصادفی و البته طبق قوانینی، باید به اندازه طول آرایه StateF ، برچسبهای S،LیاG چاپ شود
منتهی با حذف messageBox همه حالتها تکراری می شوند
احتمالا جایی را اشتباه کرده باشم ولی متوجه آن نمی شوم !!
ممنون می شوم که راهنماییم کنید یا نظرتان را بفرمایید :لبخندساده:
کد در ادامه :
namespace Test_SLG
{
public partial class Form1 : Form
{
int PairNumber;
string[] StateF = new string[5];
string Sthelp = string.Empty;
public Form1()
{
InitializeComponent();
}
private void Enterbtn_Click(object sender, EventArgs e)
{
Parallel.For(0, 5, j =>
{
//MessageBox.Show("j is :" + j);
Tagging(j);
});
for (int PairNumber = 0; PairNumber < 5; PairNumber++)
{
Sthelp = Sthelp + " *** StateF[" + PairNumber + "] is : " + StateF[PairNumber].ToString() + " *** \n";
Outputtxt.Text = Sthelp;
}
}
private void Tagging(int PairNumber)
{
Random R = new Random();
int Random1;
Random1 = R.Next(0, 100000);
// یک عدد تصادفی تولید می شود
if ((Random1 % 2 == 0) || (Random1 % 5 == 0)) StateF[(PairNumber)] = "L";
if ((Random1 % 3 == 0) || (Random1 % 5 == 0)) StateF[(PairNumber)] = "G";
else StateF[(PairNumber)] = "S";
}
}
}
فرممان هم یک دگمه enter و یک تکست باکس برای چاپ خروجی دارد.
اگر مسیج باکس را حذف بفرمایید می بینید که همه خروجی هامون تکراری می شوند !!!
یک برنامه ساده را مثال می زنم خدمتتان که با Parallel.For موازی سازی شده و جالب اینجاست که تا وقتی از MessageBox.Show جهت نمایش پیغام استفاده شود، درست کار می کند اما با حذف آن نتایج چاپ شده در تکست باکس خروجی تکراری می شود
Parallel.For(0, allPairs, j =>
{
MessageBox.Show("j is :"+j); متن این مسیج باکس هر چیزی می تواند باشد ، مهم اینجاست که تا وقتی این مسیج باکس هست برنامه درست کار می کند
Tagging(j);
});
private void Tagging( int PairNumber)
{
Random R = new Random();
int Random1 , Random2;
Random1 = R.Next(0, 100000);
// یک عدد تصادفی تولید می شود
if ((Random1 % 2 == 0) || (Random1 % 5 == 0)) StateF[(PairNumber)] = "G";
if ((Random1 % 3 == 0) || (Random1 % 5 == 0)) StateF[(PairNumbe )] = "L";
else StateF[(PairNumber)] = "S";
// براساس اینکه عدد تصادفی مان چه بوده است، یک برچسب ایجاد می شود ، S ،L یا G
کار برنامه هم که مشخصه . به شکل تصادفی و البته طبق قوانینی، باید به اندازه طول آرایه StateF ، برچسبهای S،LیاG چاپ شود
منتهی با حذف messageBox همه حالتها تکراری می شوند
احتمالا جایی را اشتباه کرده باشم ولی متوجه آن نمی شوم !!
ممنون می شوم که راهنماییم کنید یا نظرتان را بفرمایید :لبخندساده:
کد در ادامه :
namespace Test_SLG
{
public partial class Form1 : Form
{
int PairNumber;
string[] StateF = new string[5];
string Sthelp = string.Empty;
public Form1()
{
InitializeComponent();
}
private void Enterbtn_Click(object sender, EventArgs e)
{
Parallel.For(0, 5, j =>
{
//MessageBox.Show("j is :" + j);
Tagging(j);
});
for (int PairNumber = 0; PairNumber < 5; PairNumber++)
{
Sthelp = Sthelp + " *** StateF[" + PairNumber + "] is : " + StateF[PairNumber].ToString() + " *** \n";
Outputtxt.Text = Sthelp;
}
}
private void Tagging(int PairNumber)
{
Random R = new Random();
int Random1;
Random1 = R.Next(0, 100000);
// یک عدد تصادفی تولید می شود
if ((Random1 % 2 == 0) || (Random1 % 5 == 0)) StateF[(PairNumber)] = "L";
if ((Random1 % 3 == 0) || (Random1 % 5 == 0)) StateF[(PairNumber)] = "G";
else StateF[(PairNumber)] = "S";
}
}
}
فرممان هم یک دگمه enter و یک تکست باکس برای چاپ خروجی دارد.
اگر مسیج باکس را حذف بفرمایید می بینید که همه خروجی هامون تکراری می شوند !!!