Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 108,122

HOME > .NET Framework > Forum > WinApp C# ช่วยหน่อยครับ ผมใช้งาน RunWorkerAsync(object ) ใน BackgroundWorker ไม่เป็นครับ



 

WinApp C# ช่วยหน่อยครับ ผมใช้งาน RunWorkerAsync(object ) ใน BackgroundWorker ไม่เป็นครับ

 



Topic : 128673



โพสกระทู้ ( 4,021 )
บทความ ( 23 )



สถานะออฟไลน์
Facebook



คือผมต้องการให้ BackgroundWorker RunWorkerAsync ตัว void หรือ delecate ครับ

Code (C#)
 private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
           /* for (int i = 1; i <= 10000; i++)
            {
                this.workerProgressbar1.ReportProgress((double)i * 100 / 10000);
                this.Invoke(new Action(() => { this.Text = "" + i; }));
                System.Threading.Thread.Sleep(100);
            }*/
        }

        private void backgroundWorker1_ProgressChanged(object sender, TORServices.FormsTor._ProgressChangedEventArgs e)
        {
            label1.Invoke(new Action(() => { label1.Text =  e.ProgressPercentage.ToString("0.0000") + " %"; }));
            this.workerProgressbar1.Invoke(new Action(() => { workerProgressbar1.Value = (int)e.ProgressPercentage; }));
        }

        private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            MessageBox.Show("Complete...");
        }

        void Run_1()
        {
            MessageBox.Show("Test Run");
            for (int i = 1; i <= 10000; i++)
            {
                this.workerProgressbar1.ReportProgress((double)i * 100 / 10000);
                this.Invoke(new Action(() => { this.Text = "" + i; }));
                System.Threading.Thread.Sleep(100);
            }
        }
        private void button1_Click(object sender, EventArgs e)
        {
            workerProgressbar1.RunWorkerAsync(new System.Threading.ThreadStart(Run_1));
          
        }

จากโค้ด พอกด button1 มันจะ MessageBox.Show("Complete..."); เลย ไม่ผ่าน Run_1



Tag : .NET, Win (Windows App), C#, VS 2012 (.NET 4.x), VS 2013 (.NET 4.x), Windows







Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2017-08-23 10:51:54 By : lamaka.tor View : 519 Reply : 3
 

 

No. 1



โพสกระทู้ ( 74,054 )
บทความ ( 838 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Twitter Facebook

ตัวอย่างพอได้ม่ะ


ทำให้หน้าจอไม่ค้างในขณะทำงานด้วย BackgroundWorker







แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2017-08-25 17:20:58 By : mr.win
 


 

No. 2



โพสกระทู้ ( 4,021 )
บทความ ( 23 )



สถานะออฟไลน์
Facebook

ตอบความคิดเห็นที่ : 1 เขียนโดย : mr.win เมื่อวันที่ 2017-08-25 17:20:58
รายละเอียดของการตอบ ::
กรณีเรามีหลายๆ method หรือ หลายๆ delegate ละครับ

เราต้องเพิ่ม BackgroundWorker ตามจำนวน method รึป่าวครับ
หรือ บางmethod ที่มีการส่งค่า parameter ด้วยครับ



แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2017-08-25 18:53:06 By : lamaka.tor
 

 

No. 3



โพสกระทู้ ( 4,021 )
บทความ ( 23 )



สถานะออฟไลน์
Facebook

Code (C#)
DateTime dt;
        private void backgroundWorker1_DoWork_1(object sender, DoWorkEventArgs e)
        {
            for (int i = 1; i < 10; i++)
                new System.Threading.Thread(new System.Threading.ThreadStart(Run_2)).Start();
        }
        void Run_2()
        {
            int max = new Random().Next(500, 10000);
            for (int i = 1; i <max; i++)
            {
                this.richTextBox1.Invoke(new Action(() => { this.richTextBox1.Text += "\n max:" +max +"  tor " + i; }));
            System.Threading.Thread.Sleep(100);
            }
        }
        private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            this.Invoke(new Action(() => { this.Text = "time:"+ (DateTime.Now-dt).ToString(@"hh\:mm\:ss"); }));
        }

        private void button2_Click(object sender, EventArgs e)
        {
            dt = DateTime.Now;
            backgroundWorker1.RunWorkerAsync();
        }


ถ้าเราใช้

Code (C#)
new System.Threading.Thread(new System.Threading.ThreadStart(Run_2)).Start();


จะทำงาน หลายๆ Thread ได้ แต่

Code (C#)
this.Invoke(new Action(() => { this.Text = "time:"+ (DateTime.Now-dt).ToString(@"hh\:mm\:ss"); }));

จะทำงานไม่ตรง คือมันทำงานหลัง

Code (C#)
for (int i = 1; i < 10; i++)
                new System.Threading.Thread(new System.Threading.ThreadStart(Run_2)).Start();


ทั้งๆที่ Run_2 ยังทำงานไม่เสร็จเลย

แต่ถ้าใช้
Code (C#)
Run_2();


จะสามารถใช้งาน
Code (C#)
this.Invoke(new Action(() => { this.Text = "time:"+ (DateTime.Now-dt).ToString(@"hh\:mm\:ss"); }));


ผมอยากได้โค้ดที่ทำงานแยก thread กัน แต่ก็ประมวลผลโดยรวมได้ พอจะมีตัวอย่างไม๊ครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2017-08-26 15:53:08 By : lamaka.tor
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : WinApp C# ช่วยหน่อยครับ ผมใช้งาน RunWorkerAsync(object ) ใน BackgroundWorker ไม่เป็นครับ
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ FTP| ใส่แถวของตาราง ใส่คอลัมน์ตาราง| ตัวยก ตัวห้อย ตัวพิมพ์ดีด| ใส่โค้ด ใส่การอ้างถึงคำพูด| ใส่ลีสต์
smiley for :lol: smiley for :ken: smiley for :D smiley for :) smiley for ;) smiley for :eek: smiley for :geek: smiley for :roll: smiley for :erm: smiley for :cool: smiley for :blank: smiley for :idea: smiley for :ehh: smiley for :aargh: smiley for :evil:
Insert PHP Code
Insert ASP Code
Insert VB.NET Code Insert C#.NET Code Insert JavaScript Code Insert C#.NET Code
Insert Java Code
Insert Android Code
Insert Objective-C Code
Insert XML Code
Insert SQL Code
Insert Code
เพื่อความเรียบร้อยของข้อความ ควรจัดรูปแบบให้พอดีกับขนาดของหน้าจอ เพื่อง่ายต่อการอ่านและสบายตา และตรวจสอบภาษาไทยให้ถูกต้อง

อัพโหลดแทรกรูปภาพ

Notice

เพื่อความปลอดภัยของเว็บบอร์ด ไม่อนุญาติให้แทรก แท็ก [img]....[/img] โดยการอัพโหลดไฟล์รูปจากที่อื่น เช่นเว็บไซต์ ฟรีอัพโหลดต่าง ๆ
อัพโหลดแทรกรูปภาพ ให้ใช้บริการอัพโหลดไฟล์ของไทยครีเอท และตัดรูปภาพให้พอดีกับสกรีน เพื่อความโหลดเร็วและไฟล์ไม่ถูกลบทิ้ง

   
  เพื่อความปลอดภัยและการตรวจสอบ กระทู้ที่แทรกไฟล์อัพโหลดไฟล์จากที่อื่น อาจจะถูกลบทิ้ง
 
โดย
อีเมล์
บวกค่าให้ถูก
<= ตัวเลขฮินดูอารบิก เช่น 123 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)







Exchange: Voake, Comcube, รับทำเว็บไซต์ รับเขียนโปรแกรม , รับทำบัญชี , โรงงานผลิตครีม

Load balance : Server 05
ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2020 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 , 08-9968-0655 อัตราราคา คลิกที่นี่