Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Kết quả 1 đến 9 của 9
  1. #1
    Ngày tham gia
    Feb 2014
    Bài viết
    0

  2. #2

    Làm việc với Thread trong lập trình C# -Code ví dụ

    Mã:
    using System;using System.ComponentModel;using System.Threading;using System.Windows.Forms; namespace CrossThreadDemo{    public class Form1 : Form    {        // This delegate enables asynchronous calls for setting        // the text property on a TextBox control.        delegate void SetTextCallback(string text);         // This thread is used to demonstrate both thread-safe and        // unsafe ways to call a Windows Forms control.        private Thread demoThread = null;         // This BackgroundWorker is used to demonstrate the         // preferred way of performing asynchronous operations.        private BackgroundWorker backgroundWorker1;         private TextBox textBox1;        private Button setTextUnsafeBtn;        private Button setTextSafeBtn;        private Button setTextBackgroundWorkerBtn;         private System.ComponentModel.IContainer components = null;         public Form1()        {            InitializeComponent();        }         protected override void Dispose(bool disposing)        {            if (disposing && (components != null))            {                components.Dispose();            }            base.Dispose(disposing);        }         // This event handler creates a thread that calls a         // Windows Forms control in an unsafe way.        private void setTextUnsafeBtn_Click(            object sender,             EventArgs e)        {            this.demoThread =                 new Thread(new ThreadStart(this.ThreadProcUnsafe));             this.demoThread.Start();        }         // This method is executed on the worker thread and makes        // an unsafe call on the TextBox control.        private void ThreadProcUnsafe()        {            this.textBox1.Text = "This text was set unsafely.";        }         // This event handler creates a thread that calls a         // Windows Forms control in a thread-safe way.        private void setTextSafeBtn_Click(            object sender,             EventArgs e)        {            this.demoThread =                 new Thread(new ThreadStart(this.ThreadProcSafe));             this.demoThread.Start();        }         // This method is executed on the worker thread and makes        // a thread-safe call on the TextBox control.        private void ThreadProcSafe()        {            this.SetText("This text was set safely.");        }         // This method demonstrates a pattern for making thread-safe        // calls on a Windows Forms control.         //        // If the calling thread is different from the thread that        // created the TextBox control, this method creates a        // SetTextCallback and calls itself asynchronously using the        // Invoke method.        //        // If the calling thread is the same as the thread that created        // the TextBox control, the Text property is set directly.          private void SetText(string text)        {            // InvokeRequired required compares the thread ID of the            // calling thread to the thread ID of the creating thread.            // If these threads are different, it returns true.            if (this.textBox1.InvokeRequired)            {                   SetTextCallback d = new SetTextCallback(SetText);                this.Invoke(d, new object[] { text });            }            else            {                this.textBox1.Text = text;            }        }         // This event handler starts the form's         // BackgroundWorker by calling RunWorkerAsync.        //        // The Text property of the TextBox control is set        // when the BackgroundWorker raises the RunWorkerCompleted        // event.        private void setTextBackgroundWorkerBtn_Click(            object sender,             EventArgs e)        {            this.backgroundWorker1.RunWorkerAsync();        }                // This event handler sets the Text property of the TextBox        // control. It is called on the thread that created the         // TextBox control, so the call is thread-safe.        //        // BackgroundWorker is the preferred way to perform asynchronous        // operations.         private void backgroundWorker1_RunWorkerCompleted(            object sender,             RunWorkerCompletedEventArgs e)        {            this.textBox1.Text =                 "This text was set safely by BackgroundWorker.";        }         #region Windows Form Designer generated code         private void InitializeComponent()        {            this.textBox1 = new System.Windows.Forms.TextBox();            this.setTextUnsafeBtn = new System.Windows.Forms.Button();            this.setTextSafeBtn = new System.Windows.Forms.Button();            this.setTextBackgroundWorkerBtn = new System.Windows.Forms.Button();            this.backgroundWorker1 = new System.ComponentModel.BackgroundWorker();            this.SuspendLayout();            //             // textBox1            //             this.textBox1.Location = new System.Drawing.Point(12, 12);            this.textBox1.Name = "textBox1";            this.textBox1.Size = new System.Drawing.Size(240, 20);            this.textBox1.TabIndex = 0;            //             // setTextUnsafeBtn            //             this.setTextUnsafeBtn.Location = new System.Drawing.Point(15, 55);            this.setTextUnsafeBtn.Name = "setTextUnsafeBtn";            this.setTextUnsafeBtn.TabIndex = 1;            this.setTextUnsafeBtn.Text = "Unsafe Call";            this.setTextUnsafeBtn.Click += new System.EventHandler(this.setTextUnsafeBtn_Click);            //             // setTextSafeBtn            //             this.setTextSafeBtn.Location = new System.Drawing.Point(96, 55);            this.setTextSafeBtn.Name = "setTextSafeBtn";            this.setTextSafeBtn.TabIndex = 2;            this.setTextSafeBtn.Text = "Safe Call";            this.setTextSafeBtn.Click += new System.EventHandler(this.setTextSafeBtn_Click);            //             // setTextBackgroundWorkerBtn            //             this.setTextBackgroundWorkerBtn.Location = new System.Drawing.Point(177, 55);            this.setTextBackgroundWorkerBtn.Name = "setTextBackgroundWorkerBtn";            this.setTextBackgroundWorkerBtn.TabIndex = 3;            this.setTextBackgroundWorkerBtn.Text = "Safe BW Call";            this.setTextBackgroundWorkerBtn.Click += new System.EventHandler(this.setTextBackgroundWorkerBtn_Click);            //             // backgroundWorker1            //             this.backgroundWorker1.RunWorkerCompleted += new System.ComponentModel.RunWorkerCompletedEventHandler(this.backgroundWorker1_RunWorkerCompleted);            //             // Form1            //             this.ClientSize = new System.Drawing.Size(268, 96);            this.Controls.Add(this.setTextBackgroundWorkerBtn);            this.Controls.Add(this.setTextSafeBtn);            this.Controls.Add(this.setTextUnsafeBtn);            this.Controls.Add(this.textBox1);            this.Name = "Form1";            this.Text = "Form1";            this.ResumeLayout(false);            this.PerformLayout();         }         #endregion          [STAThread]        static void Main()        {            Application.EnableVisualStyles();            Application.Run(new Form1());        }     }}

  3. #3
    Ngày tham gia
    Sep 2015
    Đang ở
    24 Rạch Bùng Binh , P10,Q3 , HCM
    Bài viết
    0
    Cái này rất ít khi cần đến. Nếu ai cần đến nó tự khắc biết mà ko cần giải thích.
    Người ta tìm đến thread khi có 1 hàm nào đó phải thực hiện trong 1 thời gian mà người dùng cảm giác đc có thời gian trôi qua trong khi hàm vẫn chưa thực hiện xong. Lúc đó để biểu diễn sự hoạt động của công việc đang tiến hành người ta dùng đến thread, hoặc cần làm những công việc khác khi không quan tâm công việc này kết thúc hay chưa người ta cũng làm bằng thread.

    Nói tóm lại là ai muốn dùng làm gì thì tùy vào ý tưởng của họ. Cần thêm thông tin có thể đọc help

    Đây là 1 ví dụ về sử dụng thread:
    http://groups.google.com/group/vtyper/files?hl=en

  4. #4
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Xin hỏi khi muốn viết chương trình làm việc với máy scan, có thể dùng thread để vừa scan vừa xem những ảnh mà máy đã scan trước và thực hiện các động tác phóng to, thu nhỏ được ko?

  5. #5
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi numberVII
    Xin hỏi khi muốn viết chương trình làm việc với máy scan, có thể dùng thread để vừa scan vừa xem những ảnh mà máy đã scan trước và thực hiện các động tác phóng to, thu nhỏ được ko?
    bạn đọc qua về thread để biết nó là cái gì trước đã

  6. #6
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi nampt
    Cái này rất ít khi cần đến. Nếu ai cần đến nó tự khắc biết mà ko cần giải thích.
    Người ta tìm đến thread khi có 1 hàm nào đó phải thực hiện trong 1 thời gian mà người dùng cảm giác đc có thời gian trôi qua trong khi hàm vẫn chưa thực hiện xong. Lúc đó để biểu diễn sự hoạt động của công việc đang tiến hành người ta dùng đến thread, hoặc cần làm những công việc khác khi không quan tâm công việc này kết thúc hay chưa người ta cũng làm bằng thread.

    Nói tóm lại là ai muốn dùng làm gì thì tùy vào ý tưởng của họ. Cần thêm thông tin có thể đọc help
    Thread mà ít khi cần mới sợ, soft bi giờ đa số là multithread hết, xem các process đang chạy trên máy thì biết, cái nào cũng chạy nhiều thread 1 lúc cả. [IMG]images/smilies/biggrin.png[/IMG]
    2 cái cần dùng thread của bác nói chỉ là 2 trường hợp cụ thể trong hàng đống trường hợp cụ thể khác thôi.

  7. #7
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi sovietw0rm
    bạn đọc qua về thread để biết nó là cái gì trước đã
    Mình đã biết sử dụng Thread thông qua thư viện System.Threading nhưng chưa hiểu cách sử dụng BackgroundWorker. Xin chỉ giùm với!

  8. #8
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Các bác có thể nói thêm về các trường hợp dùng thread như thế nào không.

  9. #9
    Nói theo lý thuyết thì có 2 trường hợp sử dụng Thread
    1) sử dụng dạng WorkerThead tức là gọi thread ra để làm điều gì đó rồi đóng lại. Tiến trình chính sẽ đứng lại và chờ worker Thead xử lý xong rồi thực hiện tiếp. Các Thread sẽ làm việc độc lập và không ảnh hưởng với nhau.
    Ví dụ : bạn muốn làm cho một picturebox di chuyển trên from và trên form đó có 1 hình động khác. Bạn sẽ sử dụng một thread để di chuyển picturebox. Nếu không làm vậy thì khi picturebox di chuyển thì cái hình động hết "động". còn lý do tại sao thì chắc ai cũng biết
    2) sử dụng Thread để tăng tốc độ xử lý trong xử lý đồng hành.
    Ví dụ như bạn dùng cùng lúc 10 thread để truy vấn vào database có 10 bộ từ điển rồi lấy kết quả hiển thị lên textbox.

    Khi sử dụng thread thì việc debug hơi cực khổ, mặc khác ở một số trường hợp sử dụng thread thì tốc độ sử lý còn chậm hơn là viết bình thường. Do đó bạn phải cân nhắc trước khi quyết định dùng nó. có điều dùng thằng Thread này rồi thì lại cảm thấy khoái nó [IMG]images/smilies/smile.png[/IMG]

 

 

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •