目前我所知道的创建多线程的方法有两种:
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。它具体应该怎么用呢?

