اجرا دستورات به صروت پیاپی و ندادن وقفه به دستورات دیگه ؟
سلام و خسته نباشید...
دوستان دارم روی یه برنامه کار میکنم که بصوت پیاپی و مرحله ای عملیاتی رو انجام میده...و باید بعد از طی هر قسمت مقداری رو به پیمایش گر اضاف نماید...
مشکل اینه که وقتی دستورات به پایان رسید یک مرتبه پیماشگر پر میشه؟ :خجالت:
فکر کردم با قرار دادن کد زیر میشه یه وقفه ایجاد کرد و مقدار پیمایش به حالت نرمال برسه اما نشد...
Thread.Sleep(100);
لطفا راهنماییم کنید
نقل قول: اجرا دستورات به صروت پیاپی و ندادن وقفه به دستورات دیگه ؟
سلام دوست خوبم
با استفاده از ترد نوشتیش یا نه؟
با استفاده از ترد و راحت تر BackgroundWorker میشه لحظه به لحظه از پیش رفت مطلع و نمایش داد.
لطفا در صورت امکان کد یا توضیح کامل تری رو بیان کنین
مرسی دوست خوبم
موفق باشی
بایت بایت
نقل قول: اجرا دستورات به صروت پیاپی و ندادن وقفه به دستورات دیگه ؟
سلام
دوست خوبم ممنونم از لطفتون...
نمیخوام از نخ استفاده کنم چون نیاز به پیمایش هم دارم بهترین گزینه همون backGroundWorker هستش.
توی یکی از برنامه هام به دیلیل وقفه ها و اجرا نشدن بعضی از فرامین باید ازش استفاده کنم
خودمم دست به کار شدم اما در قسمتی از کار مشکل داشتم.
در پروژه پیوستی تابع more رو میخوام بذارم در پشت backGroundWorker .
ممنون میشم کمکم کنید.
با تشکر
نقل قول: اجرا دستورات به صروت پیاپی و ندادن وقفه به دستورات دیگه ؟
سلام دوست خوبم
میشه چنین کدی نوشت حتی میشه Sleep رو هم برداشت چون تو پردازشهای سنگین خود ترد Sleep رو مدیریت میکنه
using System.Threading;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
Control.CheckForIllegalCrossThreadCalls = false;
}
private void button1_Click(object sender, EventArgs e)
{
backgroundWorker1.RunWorkerAsync();
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
for (int i = 0; i <= 500; i++)
{
Thread.Sleep(1);
textBox1.Text = "test" + i.ToString();
int p = (i/ 500) * 100;
backgroundWorker1.ReportProgress(p);
}
}
private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
progressBar1.Value = e.ProgressPercentage;
}
}
}
موفق باشی
بایت بایت
نقل قول: اجرا دستورات به صروت پیاپی و ندادن وقفه به دستورات دیگه ؟
سلام
باید از application.dowork()
صد در صد جواب میده بزار جای sleep
نقل قول: اجرا دستورات به صروت پیاپی و ندادن وقفه به دستورات دیگه ؟
نقل قول:
نوشته شده توسط
Y_Safaiee
سلام دوست خوبم
میشه چنین کدی نوشت حتی میشه Sleep رو هم برداشت چون تو پردازشهای سنگین خود ترد Sleep رو مدیریت میکنه
using System.Threading;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
Control.CheckForIllegalCrossThreadCalls = false;
}
private void button1_Click(object sender, EventArgs e)
{
backgroundWorker1.RunWorkerAsync();
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
for (int i = 0; i <= 500; i++)
{
Thread.Sleep(1);
textBox1.Text = "test" + i.ToString();
int p = (i/ 500) * 100;
backgroundWorker1.ReportProgress(p);
}
}
private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
progressBar1.Value = e.ProgressPercentage;
}
}
}
موفق باشی
بایت بایت
سلامی دوباره عالی بود واقعا دست و پنجت درد نکنه....
خیلی کمکم کرد.
نقل قول:
سلام
باید از
application.dowork()
صد در صد جواب میده بزار جای sleep
سلام از شما هم تشکر میکنم در کد اصلا نیاز به sleep نداشتم فقط میخواستم در حلقه مکثی ایجاد شود قرار دادم برای مشاهده responsid برنامه بود....
بازم تشکر میکنم موفق باشید./ :تشویق:
نقل قول: اجرا دستورات به صروت پیاپی و ندادن وقفه به دستورات دیگه ؟
بعد ببخشید یه سوال دیگه اگه در قسمت زیر
int p = (i/ 500) * 100;
تابع یک حلقه نباشه مثلا چند تا تابع رو تحت پیمایش progress قرار بده به چه شکل میشه؟
نقل قول: اجرا دستورات به صروت پیاپی و ندادن وقفه به دستورات دیگه ؟
نقل قول:
نوشته شده توسط
samadblaj
بعد ببخشید یه سوال دیگه اگه در قسمت زیر
int p = (i/ 500) * 100;
تابع یک حلقه نباشه مثلا چند تا تابع رو تحت پیمایش progress قرار بده به چه شکل میشه؟
مقدار p عدد اختیاریه مثلا فرض کنیم 5 مرحله با زمان تقریبا برابر داریم برای حلقه اول توی ReportProgress می تونید مقدار زیر رو ارسال کنید:
int p = (i / (500 * 5)) * 100
حالا درصد یک تا بیست اختصاص داره به حلقه اول و به همین صورت می تونید مراحل دیگه رو هم پیاده کنید.
نقل قول: اجرا دستورات به صروت پیاپی و ندادن وقفه به دستورات دیگه ؟
البته اگه وسط DoWork هم خواسستید یکی از اشیای توی UI رو تغییر بدید از این کد می تونید استفاده کنید:
App.Current.Dispatcher.BeginInvoke((Action)delegat e
{
// Update GUI here.
}, null);
نقل قول: اجرا دستورات به صروت پیاپی و ندادن وقفه به دستورات دیگه ؟
نقل قول:
نوشته شده توسط
aryasoft2872
مقدار p عدد اختیاریه مثلا فرض کنیم 5 مرحله با زمان تقریبا برابر داریم برای حلقه اول توی ReportProgress می تونید مقدار زیر رو ارسال کنید:
int p = (i / (500 * 5)) * 100
حالا درصد یک تا بیست اختصاص داره به حلقه اول و به همین صورت می تونید مراحل دیگه رو هم پیاده کنید.
سلام لطفا شما اصلا حلقه منو نادیده بگیرید فکر کنید توی تابع فقط کد باز کردن کانکشن هست کد زیر به چه شکل میشه ؟
int p = (i / (500 * 5)) * 100
با تشکر
نقل قول: اجرا دستورات به صروت پیاپی و ندادن وقفه به دستورات دیگه ؟
نقل قول:
نوشته شده توسط
samadblaj
سلام لطفا شما اصلا حلقه منو نادیده بگیرید فکر کنید توی تابع فقط کد باز کردن کانکشن هست کد زیر به چه شکل میشه ؟
int p = (i / (500 * 5)) * 100
با تشکر
بازکردن کانکشن فک نکنم بشه تیکه تیکه اش کرد و از استایل هایی باید استفاده کنید که وابسته به مقدار Progress نباشه با توجه به دیزاین نرم افزارتون خودتون هم می تونید از ایده های دیگه ای استفاده کنید.
(اگه متوجه منظورم نشدید توی محیط Winforms یک progressbar بزارید و استایلش رو بزارید روی Marquee، برای کانشکشن اصولا از این شکل استفاده میشه)
نقل قول: اجرا دستورات به صروت پیاپی و ندادن وقفه به دستورات دیگه ؟
نقل قول:
بازکردن کانکشن فک نکنم بشه تیکه تیکه اش کرد و از استایل هایی باید استفاده کنید که وابسته به مقدار Progress نباشه با توجه به دیزاین نرم افزارتون خودتون هم می تونید از ایده های دیگه ای استفاده کنید.
سلام ؛
بله دقیقا منظورم همین شکل بود ممنونم این ابهامم هم روشن شد! :تشویق:
نقل قول: اجرا دستورات به صروت پیاپی و ندادن وقفه به دستورات دیگه ؟
سلام
نقل قول:
سلام لطفا شما اصلا حلقه منو نادیده بگیرید فکر کنید توی تابع فقط کد باز کردن کانکشن هست کد زیر به چه شکل میشه ؟
1
int p = (i / (500 * 5)) * 100
با تشکر
سلام من بحث رو یه بار دیگه خوندم وچیزی که متوجه شدم این بود که چه جوری میشه یک خط که زمان طولانی را مصرف می کنه رو از doWork استفاده کنی
مثل connection
خب معمولا برنامه به صورت خط به خط اجرا میشه و Dowork هم هر جا باشه اجرا میشه
معمولا این جور زمان ها خظ هایی که زمان بشتر نیاز دارن و برای اینکه برنامه هنگ نکنه از thread یا backGround Worker استفاده میشه
نقل قول: اجرا دستورات به صروت پیاپی و ندادن وقفه به دستورات دیگه ؟
نقل قول:
سلام من بحث رو یه بار دیگه خوندم وچیزی که متوجه شدم این بود که چه جوری میشه یک خط که زمان طولانی را مصرف می کنه رو از doWork استفاده کنی
مثل connection
خب معمولا برنامه به صورت خط به خط اجرا میشه و Dowork هم هر جا باشه اجرا میشه
معمولا این جور زمان ها خظ هایی که زمان بشتر نیاز دارن و برای اینکه برنامه هنگ نکنه از thread یا backGround Worker استفاده میشه
اول از شما تشکر میکنم...
بله من دلیل استفاده از نخ ها و BackGroundWorker رو میدونم فقط این سوال برام پیش اومده بود که اگه قرار بود درصد باز کردن یک کانکشن رو نمایش بدیم به چه شکل میشد که دوست خوبمون آقای aryasoft2872 جواب رو دادن...
مرسی