اشکال زدایی کد

qwqw1364

Member
باسلام با توجه به اینکه محاسباتم سنگینه من کد زیر رو نوشتم من یک باتن محاسبه دارم وقتی روش کلیک میکنم فرم5 باز میشه و نتیجه محاسبات رو نشون میده ولی وقتی بصورت زیر کدنویسی میکنم تو فرم 5 هیچ اطلاعاتی نمایش نمیده ممنون میشم همراه با کدنویسی راهنمایی بفرمایید با تشکر
کد:
 public partial class Form2 : Form
    {

        Thread a;
        decimal ca, tara,p, d;
        //int  d;

        //BackgroundWorker worker = new BackgroundWorker();
        public Form2()
        {
        
            InitializeComponent();
           
          
        }
        private void fg()
        {
if (checkBox1.Checked == false && checkBox2.Checked == false && checkBox3.Checked == false && comboBox1.Text == "" && comboBox2.Text == "" && comboBox3.Text == "")
           
            {
                f5.ShowDialog();



                f9.Close();

                return;
            }


                if (checkBox1.Checked)
                {

                    f5.listBox1.Items.Add(" زوج  است");

                }
private void button7_Click(object sender, EventArgs e)
            {
               

                a = new Thread(new ThreadStart(fg));
                a.Start();
                    //backgroundWorker1.RunWorkerAsync();
               

            }
 

the_king

مدیرکل انجمن
باسلام با توجه به اینکه محاسباتم سنگینه من کد زیر رو نوشتم من یک باتن محاسبه دارم وقتی روش کلیک میکنم فرم5 باز میشه و نتیجه محاسبات رو نشون میده ولی وقتی بصورت زیر کدنویسی میکنم تو فرم 5 هیچ اطلاعاتی نمایش نمیده ممنون میشم همراه با کدنویسی راهنمایی بفرمایید با تشکر
کد:
 public partial class Form2 : Form
    {

        Thread a;
        decimal ca, tara,p, d;
        //int  d;

        //BackgroundWorker worker = new BackgroundWorker();
        public Form2()
        {
       
            InitializeComponent();
          
         
        }
        private void fg()
        {
if (checkBox1.Checked == false && checkBox2.Checked == false && checkBox3.Checked == false && comboBox1.Text == "" && comboBox2.Text == "" && comboBox3.Text == "")
          
            {
                f5.ShowDialog();



                f9.Close();

                return;
            }


                if (checkBox1.Checked)
                {

                    f5.listBox1.Items.Add(" زوج  است");

                }
private void button7_Click(object sender, EventArgs e)
            {
              

                a = new Thread(new ThreadStart(fg));
                a.Start();
                    //backgroundWorker1.RunWorkerAsync();
              

            }
در این کد محاسباتی وجود نداره که بخواد نشون بده. در ضمن چیزی در مورد فرم f5 معلوم نیست، در مورد کدی که نمی بینم چطور نظر بدم؟
نهایت کاری که این کد انجام میده نمایش فرم f5 ئه که اصلا نیازی به Thread ساختن نداره. اگر پردازشی در f5 هست که سنگینه و طول می کشه، در همون کد فرم Form5 با Thread
ساختن مدیریت کنید، نه اینکه نمایش فرم f5 رو با Thread انجام بدید. اینکه فرم f5 رو با Thread نشون بدید کمکی به کاهش حجم پردازش نمی کنه. بالاخره تا اون پردازش تموم نشده فرم f5 آماده نیست.
 
درود
اطلاعات را به constructor کلاس فرم 5 پاس بدید و کامپونتهای مدنظرتون را مقداردهی کنید. برای نمایش هم از متد Show استفاده کنید.
 

qwqw1364

Member
در این کد محاسباتی وجود نداره که بخواد نشون بده. در ضمن چیزی در مورد فرم f5 معلوم نیست، در مورد کدی که نمی بینم چطور نظر بدم؟
نهایت کاری که این کد انجام میده نمایش فرم f5 ئه که اصلا نیازی به Thread ساختن نداره. اگر پردازشی در f5 هست که سنگینه و طول می کشه، در همون کد فرم Form5 با Thread
ساختن مدیریت کنید، نه اینکه نمایش فرم f5 رو با Thread انجام بدید. اینکه فرم f5 رو با Thread نشون بدید کمکی به کاهش حجم پردازش نمی کنه. بالاخره تا اون پردازش تموم نشده فرم f5 آماده نیست.
با سلام شاید منظورم رو درست نرسوندم من در فرم 2 یک باتن محاسبه دارم که وقتی روش کلیک میکنم نتیجه محاسبات رو در فرم 5 نشون میده حالا سوالم اینه که من کد بالا رو چطوری با thread انجام بدم که وقتی روی باتن محاسبه کلیک کنم سریع فرم 5 باز بشه در ضمن تمام کدهای من در باتن محاسبه فرم دو نوشته شده وقتی باتن محاسبه رو میزنم 30 ثانیه طول میکشه فرم5 باز بشه
 

qwqw1364

Member
با سلام شاید منظورم رو درست نرسوندم من در فرم 2 یک باتن محاسبه دارم که وقتی روش کلیک میکنم نتیجه محاسبات رو در فرم 5 نشون میده حالا سوالم اینه که من کد بالا رو چطوری با thread انجام بدم که وقتی روی باتن محاسبه کلیک کنم سریع فرم 5 باز بشه در ضمن تمام کدهای من در باتن محاسبه فرم دو نوشته شده وقتی باتن محاسبه رو میزنم 30 ثانیه طول میکشه فرم5 باز بشه
کد:
    public partial class Form2 : Form
        {

            Thread a;
            decimal ca, tara,p, d;
            //int  d;

            //BackgroundWorker worker = new BackgroundWorker();
            public Form2()
            {
          
                InitializeComponent();
              
            
            }
            private void fg()
            {
       این قسمت ارور میدهif (checkBox1.Checked == false && checkBox2.Checked == false && checkBox3.Checked == false && comboBox1.Text == "" && comboBox2.Text == "" &&  comboBox3.Text == "")
              
                {
                    f5.ShowDialog();



                    f9.Close();

                    return;
                }


                    if (checkBox1.Checked)
                    {

                        f5.listBox1.Items.Add(" زوج  است");
f5.textBox9.Text = (Convert.ToDecimal(f5.textBox15.Text) * 1).ToString();
                                                    f5.textBox14.Text = (1 * 4).ToString();
                                                   
                    }
    private void button7_Click(object sender, EventArgs e)باتن محاسبه
                {
                  

                    a = new Thread(new ThreadStart(fg));
                    a.Start();
                        //backgroundWorker1.RunWorkerAsync();
                  

                }
کدهای من زیاده مشکلم اینه که با thread انجام میدم طبق کد بالا وقتی باتن محاسبه رو میزنم هم خطا میدم که در بالا مشخص کردم هم در فرم5 چیزی نمایش نمیده
 

the_king

مدیرکل انجمن
عرض کردم خدمت تون، شما در فرم 2 فقط فرم 5 رو نمایش میدید. فرم 5 رو هم طوری طراحی کردید که فقط زمانی قابل نمایش ئه که محاسبات اش تموم بشه که اشکال کار هم دقیقا در این طراحی فرم 5 ئه.
حالا با این وضعیت فعلی شما فرم 5 رو به هر روشی هم که نمایش بدید، باز هم باید اول صبر کنید تا محاسبات اش تموم بشه. فرم 2 در این مورد کاره ای نیست،
هر چقدر هم کد فرم 2 رو تغییر بدید تاثیری در نمایش کند یا سریع فرم 5 نداره. شما باید کد فرم 5 رو تغییر بدید، نه فرم 2 را. در نظر بگیرید که Thread جدید ساختن به تنهایی معجزه نمی کنه.

کدی که نشون میدید پردازش سنگینی نداره، اینجا نه حلقه ای دارید، نه پردازشی و نه محاسباتی. شما در این کد هیچ اطلاعاتی هم به f5 ارسال نمی کنید که بخواد نمایش بده.
مثل اینه که بگید دستم درد می کنه و پا تون رو نشون بدید. این 30 ثانیه ای که مطرح می کنید ربطی با این کد ها نداره، چون چند تا if ساده است که در کسری از ثانیه انجام میشه.
شما باید اون پردازش سنگین رو که در این کد ها نیست و در فرم 5 ئه مدیریت کنید. اگر کاری انجامش 30 ثانیه طول بکشه و نشه زمان اش رو کاهش داد،
به هر حال اون 30 ثانیه رو صرف می کنه، چه با Thread جدید و چه بدون اون. دو تا کار باید انجام بدید که ربطی به این کد ها نداره :
  • کار اول بهینه سازی محاسبات در صورت امکان ئه که در زمان کمتری اجرا بشه
  • کار دوم استفاده از Thread مجزا در فروم 5 است برای اینکه زمانی که محاسبات داره انجام میشه خود فرم قفل نکنه.
تا زمانی که کد محاسبات فرم 5 معلوم نباشه نمیشه مدیریت اش کرد. هر دو کار باید روی فرم 5 انجام بشه. نمایش f5 در فرم 2 رو بدون Thread جدید و بصورت ساده بنویسید، چون
نه کمکی به حل مشکل می کنه و نه نیازی به اینکار هست. روی تغییر کد فرم 5 متمرکز بشوید.
 

qwqw1364

Member
عرض کردم خدمت تون، شما در فرم 2 فقط فرم 5 رو نمایش میدید. فرم 5 رو هم طوری طراحی کردید که فقط زمانی قابل نمایش ئه که محاسبات اش تموم بشه که اشکال کار هم دقیقا در این طراحی فرم 5 ئه.
حالا با این وضعیت فعلی شما فرم 5 رو به هر روشی هم که نمایش بدید، باز هم باید اول صبر کنید تا محاسبات اش تموم بشه. فرم 2 در این مورد کاره ای نیست،
هر چقدر هم کد فرم 2 رو تغییر بدید تاثیری در نمایش کند یا سریع فرم 5 نداره. شما باید کد فرم 5 رو تغییر بدید، نه فرم 2 را. در نظر بگیرید که Thread جدید ساختن به تنهایی معجزه نمی کنه.

کدی که نشون میدید پردازش سنگینی نداره، اینجا نه حلقه ای دارید، نه پردازشی و نه محاسباتی. شما در این کد هیچ اطلاعاتی هم به f5 ارسال نمی کنید که بخواد نمایش بده.
مثل اینه که بگید دستم درد می کنه و پا تون رو نشون بدید. این 30 ثانیه ای که مطرح می کنید ربطی با این کد ها نداره، چون چند تا if ساده است که در کسری از ثانیه انجام میشه.
شما باید اون پردازش سنگین رو که در این کد ها نیست و در فرم 5 ئه مدیریت کنید. اگر کاری انجامش 30 ثانیه طول بکشه و نشه زمان اش رو کاهش داد،
به هر حال اون 30 ثانیه رو صرف می کنه، چه با Thread جدید و چه بدون اون. دو تا کار باید انجام بدید که ربطی به این کد ها نداره :
  • کار اول بهینه سازی محاسبات در صورت امکان ئه که در زمان کمتری اجرا بشه
  • کار دوم استفاده از Thread مجزا در فروم 5 است برای اینکه زمانی که محاسبات داره انجام میشه خود فرم قفل نکنه.
تا زمانی که کد محاسبات فرم 5 معلوم نباشه نمیشه مدیریت اش کرد. هر دو کار باید روی فرم 5 انجام بشه. نمایش f5 در فرم 2 رو بدون Thread جدید و بصورت ساده بنویسید، چون
نه کمکی به حل مشکل می کنه و نه نیازی به اینکار هست. روی تغییر کد فرم 5 متمرکز بشوید.
با سلام سوال من اینه که میخوام از Thread مجزا استفاده کنم وقتی روی باتن محاسبه کلیک میکنم اطلاعات از Thread خونده بشه من فقط یه نمونه کد میخوام اگه امکان داره یه کد ساده با استفاده از Thread مجزا برام بنویسید که وقتی من روی باتن محاسبه کلیک میکنم اطلاعات داخل Thread خونده بشه 2 تا موضوع مدنظرم هست1- استفاده از Thread مجزا خارج از محیط کد نویسی باتن 2- استفاده از Thread مجزا تو خود باتن من فقط در خصوص این دو موضوع چندتا کد ساده میخوام ممنون میشم راهنمایی بفرمایید
 

the_king

مدیرکل انجمن
با سلام سوال من اینه که میخوام از Thread مجزا استفاده کنم وقتی روی باتن محاسبه کلیک میکنم اطلاعات از Thread خونده بشه من فقط یه نمونه کد میخوام اگه امکان داره یه کد ساده با استفاده از Thread مجزا برام بنویسید که وقتی من روی باتن محاسبه کلیک میکنم اطلاعات داخل Thread خونده بشه 2 تا موضوع مدنظرم هست1- استفاده از Thread مجزا خارج از محیط کد نویسی باتن 2- استفاده از Thread مجزا تو خود باتن من فقط در خصوص این دو موضوع چندتا کد ساده میخوام ممنون میشم راهنمایی بفرمایید
Thread اطلاعات مستقلی نداره که بخواهید بخونیدش، اطلاعات بین همه Thread ها مشترک ئه. یعنی متغیری که شما در فرم تون تعریف می کنید بین همه Thread هایی که به اون فرم دسترسی دارند مشترک ئه و انحصاری نیست.
شما اگر متغیری در کد فرم تان بسازید و داخل یک Thread بهش مقدار بدید، Thread اصلی فرم هم می تونه اون مقدار رو بخونه و برعکس.
مورد دوم اینه که مورد 1 تون عملا معنی نداره. اگه Button شما بخواد با کلیک کردنش منجر به ایجاد Thread باشه دیگه مجزا محسوب نمیشه. شما مثال Thread رو در کد خودتون هم دارید، کلا اشکالی هم در Thread ساختن کد تون نمی بینم.
کد:
        private void button1_Click(object sender, EventArgs e)
        {
            var thread = new Thread(new ThreadStart(ThreadProc));
            thread.Start();
        }

        private void ThreadProc()
        {
            //Your code;
        }
مشکل تون مشخصه اما درخواست تون راه حل مساله نیست، شما چه در ThreadProc فرم f5 رو باز کنید و چه در خود button1_Click، تاخیر برای محاسبات باقی می مونه.
جایی که محاسبات تون انجام میشه رو پیدا کنید، کاری که باید انجام بشه اونجا است.
 

جدیدترین ارسال ها

بالا