目前我所知道的创建多线程的方法有两种:

1). delegate void myDele(); myDele myDeleHandler = new myDele(method); myDeleHandler.BeginInvoke(null, null);

2). using ST = System.Threading;

ST.Thread thread = new System.Threading.Thread(new ST.ThreadStart(method));

thread.Start();

 

窗体与线程通信的问题:

一般来讲,一个窗体 A 调用线程 B,然后在特定的情况下,B 把某些数据返回给窗体显示。这时像我一样的初学者会直接在 B 中写上诸如 this.label1.Text = "******"; 。但其实这样会引发 cross-thread operation 异常。因为线程 B 并不是创建 label1 的对象。显然这样显示语句应该由窗体的 UI 线程来调用。下面是示例代码:

 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using SIO = System.IO;
using ST = System.Threading;

namespace WindowsApplication1
{
    
public partial class Form1 : Form
    
{
        
public Form1()
        
{
            InitializeComponent();
            DisplayDataHandler 
+= new DisplayDataDelegate(DisplayDataM);
        }


        
private void button1_Click(object sender, EventArgs e)
        
{
            ST.Thread readThread 
= new System.Threading.Thread(new System.Threading.ThreadStart(ReadData));
            readThread.Start();
        }


        
private delegate void DisplayDataDelegate();
        
private DisplayDataDelegate DisplayDataHandler;

        
private void ReadData()
        
{
            SIO.StreamReader sr 
= new System.IO.StreamReader("test.txt");
            
while (sr.Peek() > 0)
            
{
                
string str = sr.ReadLine();
                
if (str.Contains("yang"))
                
{
                    DisplayData();
                    
break;
                }

            }

            sr.Close();
        }


        
private void DisplayData()
        
{
            BeginInvoke(DisplayDataHandler);
        }


        
private void DisplayDataM()
        
{
            
this.label1.Text = "yang";
        }

    }

}


问题:
Control 中有一个 bool 成员变量叫 InvokeRequried。它具体应该怎么用呢?