PDA

View Full Version : backgroundworker



msadeqbabaei
چهارشنبه 08 آذر 1391, 08:52 صبح
سلام دوستان:لبخندساده:

من یک برنامه دفترچه تلفن ساده نوشتم که می خوام حین گزارش گیری بتونم با پنجره های دیگه هم کار کنم و کد گزارش گیری من اینه : به اضافه یک کد دیگه که اطلاعات رو از جدول بازیابی می کنه اگه می شه منو راهنمایی کنید !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

CrystalReport1 c = new CrystalReport1();

c.SetDataSource(dataTableEmp);
crystalReportViewer1.ReportSource = c

با تشکر

Y_Safaiee
چهارشنبه 08 آذر 1391, 09:11 صبح
سلام دوست من

منظورت دقیقا چیه اگه منظورت اینه که بتونی با سایر فرم ها تعامل داشته باشی میتونی جای ShowDialog از Show استفاده کنی و کد بروزرسانی اطلاعات رو در رویداد Active فرم بنویسی ,با اینکار مثلا اگه تو فرم اضافه کردن مقدار جدید اضافه کنی با انتخاب فرم گزارش گیری اطلاعات بروز میشه و اون رکوردم نمایش داده میشه.

اگه منظورت اینه که در حین گزارش گیری فرم های دیگه وظایف دیگه ای بر عهده بگیرن همونطورم که قبلا بهت گفتم یک BackgroundWorker بزار.

BackgroundWorker همون ترد هست اما مدل ویژوالش که باهاش میشه به صورت بصری باهاش کار کرد و مقادیر رو رد و بدل کرد.

اگه غیر ازاینهاست زیبا و شفاف توضیح بده دقیقا میخوای چیکار کنی تا ما هم زیبا و شفاف برات توضیح بدیم.

موفق باشی
بایت بایت

msadeqbabaei
چهارشنبه 08 آذر 1391, 09:20 صبح
سلام دوست من

منظورت دقیقا چیه اگه منظورت اینه که بتونی با سایر فرم ها تعامل داشته باشی میتونی جای ShowDialog از Show استفاده کنی و کد بروزرسانی اطلاعات رو در رویداد Active فرم بنویسی ,با اینکار مثلا اگه تو فرم اضافه کردن مقدار جدید اضافه کنی با انتخاب فرم گزارش گیری اطلاعات بروز میشه و اون رکوردم نمایش داده میشه.

اگه منظورت اینه که در حین گزارش گیری فرم های دیگه وظایف دیگه ای بر عهده بگیرن همونطورم که قبلا بهت گفتم یک BackgroundWorker بزار.

BackgroundWorker همون ترد هست اما مدل ویژوالش که باهاش میشه به صورت بصری باهاش کار کرد و مقادیر رو رد و بدل کرد.

اگه غیر ازاینهاست زیبا و شفاف توضیح بده دقیقا میخوای چیکار کنی تا ما هم زیبا و شفاف برات توضیح بدیم.

موفق باشی
بایت بایت


دوست عزیز منظور من همون است که حین گزارشگیر ی فرم های دیگه وظایف دیگه ای بر عهده دارن بتونن انجام بدن و اما حقیقت من کار با backgroundworker رو نمیدونم چطوری یعنی نمی دونم مثلا کد گزارشگیری رو توdoworkبنویسم یا کد نمایش فرم گزارش گیری رو توی اون بنویسم ؟

AvantGarde
شنبه 11 آذر 1391, 16:29 عصر
از حرفاتون اینطور برداشت میشه که قصد دارید بار پردازشی عمل گزارش گیری رو به یه نخ دیگه بدید تا وقفه ای در کار با فرمتون ایجاد نشه. واسه اینکار میتونید از یک BackgroundWorker استفاده کنید. این شی دو رویداد DoWork که قراره عمل اصلی که قراره به نخ جدیدمون محول بشه رو انجام بده - و RunWorkerCompleted که ازش میتونید به عنوان دریافت نتیجه کار اتمام BackgroundWorker استفاده کنید رو داره. تابع RunWorkerAsync هم واسه صدا زدن DoWork استفاده میشه. اما نکته اینجاست که اشیای ایجاد شده تو نخ اصلیتون رو نمیشه تو DoWork (برخلاف RunWorkerCompleted )استفادشون کرد و همینطور بالعکس. اما آرگومان DoWorkEventArgs e تو DoWork و RunWorkerCompleted مشترکن که میتونید نتیجه کار رو در انتهای DoWork توی پروپرتی Result این آرگومان بذارید و همون پروپرتی رو توی RunWorkerCompleted ازش استفاده کنید.
در مورد مثال شما باید CrystalReport و اشیای ارتباط با بانکت رو تو DoWork ایجاد کنید و در انتها e.Result برابر همون CrystalReport که تو همین تابع ساختید بکنید و تو RunWorkerCompleted ، همون crystalReportViewer1 که تو فرم اصلیتون ساختید رو به این شکل مقدار دهی کنید:

crystalReportViewer1.ReportSource = (CrystalReport)e.Result;

واسه ایجاد رویدادهای BackgroundWorker به این صورت اقدام می کنید

BackgroundWorker bw = new BackgroundWorker();
bw.DoWork += new DoWorkEventHandler(bw_DoWork);
bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bw_RunWorkerComplet ed);

و هرجا نیاز هست که عمل گذارش گیری انجام بشه تابع RunWorkerAsync رو صدا می زنید.

msadeqbabaei
شنبه 11 آذر 1391, 16:33 عصر
از حرفاتون اینطور برداشت میشه که قصد دارید بار پردازشی عمل گزارش گیری رو به یه نخ دیگه بدید تا وقفه ای در کار با فرمتون ایجاد نشه. واسه اینکار میتونید از یک BackgroundWorker استفاده کنید. این شی دو رویداد DoWork که قراره عمل اصلی که قراره به نخ جدیدمون محول بشه رو انجام بده - و RunWorkerCompleted که ازش میتونید به عنوان دریافت نتیجه کار اتمام BackgroundWorker استفاده کنید رو داره. تابع RunWorkerAsync هم واسه صدا زدن DoWork استفاده میشه. اما نکته اینجاست که اشیای ایجاد شده تو نخ اصلیتون رو نمیشه تو DoWork (برخلاف RunWorkerCompleted )استفادشون کرد و همینطور بالعکس. اما آرگومان DoWorkEventArgs e تو DoWork و RunWorkerCompleted مشترکن که میتونید نتیجه کار رو در انتهای DoWork توی پروپرتی Result این آرگومان بذارید و همون پروپرتی رو توی RunWorkerCompleted ازش استفاده کنید.
در مورد مثال شما باید CrystalReport و اشیای ارتباط با بانکت رو تو DoWork ایجاد کنید و در انتها e.Result برابر همون CrystalReport که ساختید بکنید و تو RunWorkerCompleted همون crystalReportViewer1 که تو فرم اصلیتون ساختید رو به این شکل مقدار دهی کنید:

((CrystalReport)e.Result).SetDataSource(dataTableE mp);




از شما بابت پاسخگويي متشكرم

AvantGarde
شنبه 11 آذر 1391, 18:15 عصر
خواهش می کنم.
کد رو هم اصلاح کردم