Từ 1 tới 9 trên tổng số 9 kết quả

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

  1. #1
    Ngày gia nhập
    05 2007
    Bài viết
    55

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

    Visual C# Code:
    1. using System;
    2. using System.ComponentModel;
    3. using System.Threading;
    4. using System.Windows.Forms;
    5.  
    6. namespace CrossThreadDemo
    7. {
    8.     public class Form1 : Form
    9.     {
    10.         // This delegate enables asynchronous calls for setting
    11.         // the text property on a TextBox control.
    12.         delegate void SetTextCallback(string text);
    13.  
    14.         // This thread is used to demonstrate both thread-safe and
    15.         // unsafe ways to call a Windows Forms control.
    16.         private Thread demoThread = null;
    17.  
    18.         // This BackgroundWorker is used to demonstrate the
    19.         // preferred way of performing asynchronous operations.
    20.         private BackgroundWorker backgroundWorker1;
    21.  
    22.         private TextBox textBox1;
    23.         private Button setTextUnsafeBtn;
    24.         private Button setTextSafeBtn;
    25.         private Button setTextBackgroundWorkerBtn;
    26.  
    27.         private System.ComponentModel.IContainer components = null;
    28.  
    29.         public Form1()
    30.         {
    31.             InitializeComponent();
    32.         }
    33.  
    34.         protected override void Dispose(bool disposing)
    35.         {
    36.             if (disposing && (components != null))
    37.             {
    38.                 components.Dispose();
    39.             }
    40.             base.Dispose(disposing);
    41.         }
    42.  
    43.         // This event handler creates a thread that calls a
    44.         // Windows Forms control in an unsafe way.
    45.         private void setTextUnsafeBtn_Click(
    46.             object sender,
    47.             EventArgs e)
    48.         {
    49.             this.demoThread =
    50.                 new Thread(new ThreadStart(this.ThreadProcUnsafe));
    51.  
    52.             this.demoThread.Start();
    53.         }
    54.  
    55.         // This method is executed on the worker thread and makes
    56.         // an unsafe call on the TextBox control.
    57.         private void ThreadProcUnsafe()
    58.         {
    59.             this.textBox1.Text = "This text was set unsafely.";
    60.         }
    61.  
    62.         // This event handler creates a thread that calls a
    63.         // Windows Forms control in a thread-safe way.
    64.         private void setTextSafeBtn_Click(
    65.             object sender,
    66.             EventArgs e)
    67.         {
    68.             this.demoThread =
    69.                 new Thread(new ThreadStart(this.ThreadProcSafe));
    70.  
    71.             this.demoThread.Start();
    72.         }
    73.  
    74.         // This method is executed on the worker thread and makes
    75.         // a thread-safe call on the TextBox control.
    76.         private void ThreadProcSafe()
    77.         {
    78.             this.SetText("This text was set safely.");
    79.         }
    80.  
    81.         // This method demonstrates a pattern for making thread-safe
    82.         // calls on a Windows Forms control.
    83.         //
    84.         // If the calling thread is different from the thread that
    85.         // created the TextBox control, this method creates a
    86.         // SetTextCallback and calls itself asynchronously using the
    87.         // Invoke method.
    88.         //
    89.         // If the calling thread is the same as the thread that created
    90.         // the TextBox control, the Text property is set directly.
    91.  
    92.         private void SetText(string text)
    93.         {
    94.             // InvokeRequired required compares the thread ID of the
    95.             // calling thread to the thread ID of the creating thread.
    96.             // If these threads are different, it returns true.
    97.             if (this.textBox1.InvokeRequired)
    98.             {  
    99.                 SetTextCallback d = new SetTextCallback(SetText);
    100.                 this.Invoke(d, new object[] { text });
    101.             }
    102.             else
    103.             {
    104.                 this.textBox1.Text = text;
    105.             }
    106.         }
    107.  
    108.         // This event handler starts the form's
    109.         // BackgroundWorker by calling RunWorkerAsync.
    110.         //
    111.         // The Text property of the TextBox control is set
    112.         // when the BackgroundWorker raises the RunWorkerCompleted
    113.         // event.
    114.         private void setTextBackgroundWorkerBtn_Click(
    115.             object sender,
    116.             EventArgs e)
    117.         {
    118.             this.backgroundWorker1.RunWorkerAsync();
    119.         }
    120.        
    121.         // This event handler sets the Text property of the TextBox
    122.         // control. It is called on the thread that created the
    123.         // TextBox control, so the call is thread-safe.
    124.         //
    125.         // BackgroundWorker is the preferred way to perform asynchronous
    126.         // operations.
    127.  
    128.         private void backgroundWorker1_RunWorkerCompleted(
    129.             object sender,
    130.             RunWorkerCompletedEventArgs e)
    131.         {
    132.             this.textBox1.Text =
    133.                 "This text was set safely by BackgroundWorker.";
    134.         }
    135.  
    136.         #region Windows Form Designer generated code
    137.  
    138.         private void InitializeComponent()
    139.         {
    140.             this.textBox1 = new System.Windows.Forms.TextBox();
    141.             this.setTextUnsafeBtn = new System.Windows.Forms.Button();
    142.             this.setTextSafeBtn = new System.Windows.Forms.Button();
    143.             this.setTextBackgroundWorkerBtn = new System.Windows.Forms.Button();
    144.             this.backgroundWorker1 = new System.ComponentModel.BackgroundWorker();
    145.             this.SuspendLayout();
    146.             //
    147.             // textBox1
    148.             //
    149.             this.textBox1.Location = new System.Drawing.Point(12, 12);
    150.             this.textBox1.Name = "textBox1";
    151.             this.textBox1.Size = new System.Drawing.Size(240, 20);
    152.             this.textBox1.TabIndex = 0;
    153.             //
    154.             // setTextUnsafeBtn
    155.             //
    156.             this.setTextUnsafeBtn.Location = new System.Drawing.Point(15, 55);
    157.             this.setTextUnsafeBtn.Name = "setTextUnsafeBtn";
    158.             this.setTextUnsafeBtn.TabIndex = 1;
    159.             this.setTextUnsafeBtn.Text = "Unsafe Call";
    160.             this.setTextUnsafeBtn.Click += new System.EventHandler(this.setTextUnsafeBtn_Click);
    161.             //
    162.             // setTextSafeBtn
    163.             //
    164.             this.setTextSafeBtn.Location = new System.Drawing.Point(96, 55);
    165.             this.setTextSafeBtn.Name = "setTextSafeBtn";
    166.             this.setTextSafeBtn.TabIndex = 2;
    167.             this.setTextSafeBtn.Text = "Safe Call";
    168.             this.setTextSafeBtn.Click += new System.EventHandler(this.setTextSafeBtn_Click);
    169.             //
    170.             // setTextBackgroundWorkerBtn
    171.             //
    172.             this.setTextBackgroundWorkerBtn.Location = new System.Drawing.Point(177, 55);
    173.             this.setTextBackgroundWorkerBtn.Name = "setTextBackgroundWorkerBtn";
    174.             this.setTextBackgroundWorkerBtn.TabIndex = 3;
    175.             this.setTextBackgroundWorkerBtn.Text = "Safe BW Call";
    176.             this.setTextBackgroundWorkerBtn.Click += new System.EventHandler(this.setTextBackgroundWorkerBtn_Click);
    177.             //
    178.             // backgroundWorker1
    179.             //
    180.             this.backgroundWorker1.RunWorkerCompleted += new System.ComponentModel.RunWorkerCompletedEventHandler(this.backgroundWorker1_RunWorkerCompleted);
    181.             //
    182.             // Form1
    183.             //
    184.             this.ClientSize = new System.Drawing.Size(268, 96);
    185.             this.Controls.Add(this.setTextBackgroundWorkerBtn);
    186.             this.Controls.Add(this.setTextSafeBtn);
    187.             this.Controls.Add(this.setTextUnsafeBtn);
    188.             this.Controls.Add(this.textBox1);
    189.             this.Name = "Form1";
    190.             this.Text = "Form1";
    191.             this.ResumeLayout(false);
    192.             this.PerformLayout();
    193.  
    194.         }
    195.  
    196.         #endregion
    197.  
    198.  
    199.         [STAThread]
    200.         static void Main()
    201.         {
    202.             Application.EnableVisualStyles();
    203.             Application.Run(new Form1());
    204.         }
    205.  
    206.     }
    207. }

  2. #2
    Ngày gia nhập
    04 2007
    Bài viết
    16

    bác nampt sao không giải thích cho anh em một câu. hichic,
    Việt Nam quang vinh muôn năm!!!!!!!!!!!!

  3. #3
    Ngày gia nhập
    05 2007
    Bài viết
    55

    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 gia nhập
    09 2008
    Nơi ở
    Hà Nội
    Bài viết
    12

    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?
    -numberVII-

  5. #5
    Ngày gia nhập
    02 2009
    Bài viết
    34

    Trích dẫn Nguyên bản được gửi bởi numberVII Xem bài viết
    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 gia nhập
    04 2007
    Bài viết
    134

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

    Trích dẫn Nguyên bản được gửi bởi nampt Xem bài viết
    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ả.
    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 gia nhập
    09 2008
    Nơi ở
    Hà Nội
    Bài viết
    12

    Trích dẫn Nguyên bản được gửi bởi sovietw0rm Xem bài viết
    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!
    -numberVII-

  8. #8
    Ngày gia nhập
    04 2010
    Bài viết
    10

    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
    Ngày gia nhập
    05 2010
    Bài viết
    5

    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ó

Các đề tài tương tự

  1. Trả lời: 0
    Bài viết cuối: 16-02-2012, 10:37 PM
  2. Hủy Thread khi đang copy file trong thread?
    Gửi bởi khabin trong diễn đàn Windows API, Hooking, xử lý Windows Message
    Trả lời: 6
    Bài viết cuối: 27-01-2012, 09:15 PM
  3. Giới thiệu thread và multi thread trong lập trình C#
    Gửi bởi dieucay555 trong diễn đàn Tutorials và Thủ thuật lập trình C#, ASP.NET
    Trả lời: 2
    Bài viết cuối: 26-07-2011, 06:16 PM
  4. Socket vẫn bị lỗi khi dùng Thread? không thể gán giá trị vào textbox trong Thread ^^!
    Gửi bởi lion080889 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 4
    Bài viết cuối: 16-07-2011, 06:35 PM
  5. Thread trong Dialog và Thread trog Tabcontrol ???
    Gửi bởi nam_dkn trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 2
    Bài viết cuối: 20-03-2009, 10:43 AM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn