PDA

View Full Version : سوال: ایا برای اجرای progressBar در این برنامه باید از نخ استفاده کنم؟



دلتنگ اسمان
شنبه 21 دی 1392, 11:01 صبح
سلام.
وقتی دکمه اجرا رو میزنم یکی از این شرطها اجرا میشه که بیشترین زمان روی متدی که در اخرین خط در هر شرط نوشته شده صرف میشه. ولی progressBar موقع اجرای برنامه چیزی نشون نمیده و زمانی که برنامه تموم میشه progressBar تازه شروع میکنه به پر شدن. ایا باید از نخ استفاده کنم ؟ یا راه دیگه ای داره؟ ممنون

timer1.Start();

if (radioButton2.Checked)
{
cod99 cod = new cod99();
cod.FileName_barnameh = this.FileName_barnameh;
cod.FileName110_99_88 = this.FileName110_99_88;
cod.number_days = this.number_days;
cod.cod_99();

}

else if (radioButton1.Checked)
{
cod110 cod = new cod110();
cod.FileName_barnameh = this.FileName_barnameh;
cod.FileName110_99_88 = this.FileName110_99_88;
cod.number_days = this.number_days;
cod.cod_110();

}

else if (radioButton3.Checked)
{
cod88 cod = new cod88();
cod.FileName_barnameh = this.FileName_barnameh;
cod.FileName110_99_88 = this.FileName110_99_88;
cod.number_days = this.number_days;
cod.cod_88();
}


این هم برای تایمر :
int pro = 0;
private void timer1_Tick(object sender, EventArgs e)
{
if (progressBar1.Value == progressBar1.Maximum)
{
timer1.Stop();
}
else
{
progressBar1.Value = pro;
pro++;
}
}

rahnema1
شنبه 21 دی 1392, 13:18 عصر
سلام، اصلا تایمر لازم نیست بذارید اینکه مقدار پروگرس بار تغییر کنه را باید در داخل متد cod-88 بگید این کار انجام بشه حالا من نمی دونم داخل cod-88 چیه اما اگه مثلا یک حلقه فور داخلش باشه باید بگید با توجه به پیشرفت حلقه فور به مقدار پروگرس بار هم افزوده بشه البته یک روشش اینه اما همچنین شما می تونید یک متغیر داخل کلاس cod تعریف کنید که با پیشرفت حلقه به مقدار اون افزوده بشه در همین حین از داخل تایمر مقدار اون متغیر را بخونید و پروگرس بار را با توجه به اون جلو ببرید

دلتنگ اسمان
شنبه 21 دی 1392, 13:34 عصر
سلام، اصلا تایمر لازم نیست بذارید اینکه مقدار پروگرس بار تغییر کنه را باید در داخل متد cod-88 بگید این کار انجام بشه حالا من نمی دونم داخل cod-88 چیه اما اگه مثلا یک حلقه فور داخلش باشه باید بگید با توجه به پیشرفت حلقه فور به مقدار پروگرس بار هم افزوده بشه البته یک روشش اینه اما همچنین شما می تونید یک متغیر داخل کلاس cod تعریف کنید که با پیشرفت حلقه به مقدار اون افزوده بشه در همین حین از داخل تایمر مقدار اون متغیر را بخونید و پروگرس بار را با توجه به اون جلو ببرید
cod_88 یه کلاسی هستش که توش چند تا حلقه و متد و کدهای دسترسی به فایل اکسل و ... تعریف شده. میخوام در زمان اجرای کدهای این کلاس پروگرس بار جلو بره.

rahnema1
شنبه 21 دی 1392, 18:53 عصر
خب الان کجای کار مشکله اگه براتون امکان نداره تمام کدتون را بذارید فقط کلاسهای خالی که شامل حلقه فور باشه را بذارید تا ببینیم چه کارش میشه کرد

دلتنگ اسمان
یک شنبه 22 دی 1392, 09:30 صبح
خب الان کجای کار مشکله اگه براتون امکان نداره تمام کدتون را بذارید فقط کلاسهای خالی که شامل حلقه فور باشه را بذارید تا ببینیم چه کارش میشه کرد
بفرمایید این هم کل کدهای کلاس cod-88 :

class cod88
{
public string FileName_barnameh, FileName110_99_88;
public int number_days;
public void cod_88()
{

int tedad_row = 20;

bool M_shiftCod = false, E_shiftCod = false, N_shiftCod = false;

Range range_radif1, range_radif2, range_radif3;

Worksheet worksheetbarname, worksheet110_99_88_1, worksheet110_99_88_2;// sheetsbarnameh, sheets110_99_8;

string[] column_Excel = {"A","B","C","D","E","F","G","H","I","J","K","L","M", "N","O","P","Q","R","S"
,"T","U","V","W","X","Y","Z","AA","AB","AC","AD","AE", "AF","AG","AH","AI","AJ","AK",
"AL","AM","AN","AO","AP", "AQ","AR","AS","AT","AU","AV"};


object mis = System.Reflection.Missing.Value;
Microsoft.Office.Interop.Excel.Application ExcelAppbarnameh = new Microsoft.Office.Interop.Excel.Application();

ExcelAppbarnameh.Visible = false;
System.Threading.Thread.CurrentThread.CurrentCultu re = new System.Globalization.CultureInfo("en-US");

Microsoft.Office.Interop.Excel.Application ExcelApp_110_99_88 = new Microsoft.Office.Interop.Excel.Application();

ExcelApp_110_99_88.Visible = false;
System.Threading.Thread.CurrentThread.CurrentCultu re = new System.Globalization.CultureInfo("en-US");


//باز کردن برنامه اصلی یا همان برنامه شیفتی پرسنل
Workbook workbook_barnameh = ExcelAppbarnameh.Workbooks.Open(FileName_barnameh, mis, mis, mis, mis, mis,
mis, mis, mis, mis, mis, mis, mis, mis, mis);
Sheets sheetsbarnameh = workbook_barnameh.Worksheets;

//باز کردن برنامه کدها یا همان 110_99_88
Workbook workbook110_99_88 = ExcelApp_110_99_88.Workbooks.Open(FileName110_99_8 8, mis, mis, mis, mis,
mis, mis, mis, mis, mis, mis, mis, mis, mis, mis);
Sheets sheets110_99_8 = workbook110_99_88.Worksheets;



bool bolSHeeftBakh_M = false, bolSHeeftBakh_E = false, bolSHeeftBakh_N = false;
string namesheet = "";
int Contsheetbarname = 12;
for (int t = 1; t <= Contsheetbarname; t++)
{
int q = 0;
worksheetbarname = (Worksheet)sheetsbarnameh.get_Item(t);
namesheet = worksheetbarname.Name;
if (namesheet != "بیهوشی" && namesheet != "زنان" && namesheet != "اطفال" && namesheet != "ICU")
continue;
else
{
// صفحه اول کد 88
worksheet110_99_88_1 = (Worksheet)sheets110_99_8.get_Item(6);

//صفحه دوم کد 88
worksheet110_99_88_2 = (Worksheet)sheets110_99_8.get_Item(7);

//مي باشدtedad_row حلقه زير براي بدست اوردن متغير
range_radif1 = (Range)worksheetbarname.get_Range("B" + 7, "B" + 26);
System.Array valuearray_radif1 = (System.Array)range_radif1.Value2;

for (int wr = 1; wr <= 20; wr++)
{
if (valuearray_radif1.GetValue(wr, 1) == null)
break;
tedad_row = wr;
}
if (namesheet != "بیهوشی")
tedad_row = tedad_row - 1;

for (int r = 1; r <= number_days; r++)//حرکت در طول ردیفها از راست به چپ
{
//تعریف رنج در برنامه اصلی
range_radif2 = (Range)worksheetbarname.get_Range(column_Excel[r + 6] + 7, column_Excel[r + 6] + (tedad_row + 6));
System.Array valuearray_radif2 = (System.Array)range_radif2.Value2;
if (r <= 15)
// تعریف رنج در برنامه 88 صفحه اول
range_radif3 = (Range)worksheet110_99_88_1.get_Range(column_Excel[r + 1] + 4, column_Excel[r + 1] + 18);

else
// تعریف رنج در برنامه 88 صفحه دوم
//چون مقدار متغیر (آر) به 15 رسیده است پس در صفحه دوم که باید ستونها از اول شروع شوند 15 تا کم میکنیم
range_radif3 = (Range)worksheet110_99_88_2.get_Range(column_Excel[(r - 15) + 1] + 4, column_Excel[(r - 15) + 1] + 18);

//مقداردهی اولیه
M_shiftCod = false; E_shiftCod = false; N_shiftCod = false;
string family2 = "", cell2 = "";

FamilySpl prst = new FamilySpl();
string name_family2 = "";
int tt2 = 0;
if (namesheet != "بیهوشی") tt2 = 2;
else tt2 = 1;
for (int tt = tt2; tt <= tedad_row; tt++)
{
cell2 = (string)valuearray_radif2.GetValue(tt, 1);
if (cell2 == null) cell2 = "O";

if (cell2 != "M" && cell2 != "E" && cell2 != "N" && cell2 != "ME"
&& cell2 != "EN" && cell2 != "MN" && cell2 != "MEN" &&
cell2 != "DN" && cell2 != "DN2" && cell2 != "MN2" && cell2 != "EN2"
&& cell2 != "ENV" && cell2 != "MNV" && cell2 != "MV" && cell2 != "EV" && cell2 != "NV" &&

cell2 != "ENv" && cell2 != "MNv" && cell2 != "Mv" && cell2 != "Ev" && cell2 != "Nv" &&
cell2 != "MEv" &&

cell2 != "MEV" && cell2 != "N2" && cell2 != "DE") continue;

family2 = "";
try
{
name_family2 = (string)valuearray_radif1.GetValue(tt, 1);
family2 = prst.FamilySplit(name_family2);
}
catch (Exception qq)
{ MessageBox.Show("اشكال در اسپل کردن فامیلی"); }

bolSHeeftBakh_M = prst.barresysheeft_M(cell2);
bolSHeeftBakh_E = prst.barresysheeft_E(cell2);
bolSHeeftBakh_N = prst.barresysheeft_N(cell2);

if (family2 == "ارحام نمازی") family2 = "نمازی";
else if (family2 == "امين توکلی") family2 = "توکلی";

if (bolSHeeftBakh_M == true && M_shiftCod == false)
{
M_shiftCod = true;
//نوشتن در شیت کد 88
if (namesheet == "بیهوشی")
range_radif3.Cells[1, 1] = family2;
else if (namesheet == "ICU")
range_radif3.Cells[2, 1] = family2;
else if (namesheet == "زنان")
range_radif3.Cells[3, 1] = family2;
else if (namesheet == "اطفال")
range_radif3.Cells[4, 1] = family2;
}

if (bolSHeeftBakh_E == true && E_shiftCod == false)
{
E_shiftCod = true;

//نوشتن در شیت کد 88
if (namesheet == "بیهوشی")
range_radif3.Cells[5, 1] = family2;
else if (namesheet == "ICU")
range_radif3.Cells[6, 1] = family2;
else if (namesheet == "زنان")
range_radif3.Cells[7, 1] = family2;
else if (namesheet == "اطفال")
range_radif3.Cells[8, 1] = family2;
}

if (bolSHeeftBakh_N == true && N_shiftCod == false)
{
N_shiftCod = true;

//نوشتن در شیت کد 88
if (namesheet == "بیهوشی")
range_radif3.Cells[9, 1] = family2;
else if (namesheet == "ICU")
range_radif3.Cells[10, 1] = family2;
else if (namesheet == "زنان")
range_radif3.Cells[11, 1] = family2;
else if (namesheet == "اطفال")
range_radif3.Cells[12, 1] = family2;
}

}

}//End for (int r = 1; r <= number_days; r++)//حرکت در طول ردیفها از راست به چپ

}//End else

}//End for (int t = 1; t <= Contsheetbarname; t++)

ExcelAppbarnameh.Quit();
ExcelApp_110_99_88.Visible = true;
}
}

forodo
یک شنبه 22 دی 1392, 09:45 صبح
از کنترل BackgroundWorker استفاده کنید.

دلتنگ اسمان
یک شنبه 22 دی 1392, 09:55 صبح
از کنترل BackgroundWorker استفاده کنید.
اصلا بلد نیستم . میشه توضیح بدید . چیکارباید بکنم؟

fmehrvarzi
یک شنبه 22 دی 1392, 11:35 صبح
لینک خوبیه ، میتونه بهتون کمک کنه
آموزش کامپوننت Backgroundworker (http://barnamenevis.org/showthread.php?200544-%D8%A2%D9%85%D9%88%D8%B2%D8%B4-Backgroundworker)