程序代码过程示例如下,大体是一个窗体在新线程里调用了另一个窗体的控件,不知道为什么一直不可以用//程序一启动就开个新线程,调用DrawMap方法
private void map_Load(object sender, EventArgs e)
{
Thread threadListen = new Thread(new ThreadStart(DrawMap));
threadListen.Start();
}//在这里他调用了一个函数,不断的在另一个窗体里显示字符串
private void DrawMap ( )
{
while(true)
{
DrawMap("123");
}
}//一个线程调用另一个线程的控件
private delegate void viewDelegate (string s);
private void view( string s)
{
if (this.InvokeRequired )
{
//程序执行到这里以后,上边的判断this.InvokeRequired 一直是true
viewDelegate myDelegate = new viewDelegate(view);
myDelegate.Invoke(s);
}
else
{
form2.lable.text=s;
}
}
大家帮帮忙 给解决一下
private void map_Load(object sender, EventArgs e)
{
Thread threadListen = new Thread(new ThreadStart(DrawMap));
threadListen.Start();
}//在这里他调用了一个函数,不断的在另一个窗体里显示字符串
private void DrawMap ( )
{
while(true)
{
DrawMap("123");
}
}//一个线程调用另一个线程的控件
private delegate void viewDelegate (string s);
private void view( string s)
{
if (this.InvokeRequired )
{
//程序执行到这里以后,上边的判断this.InvokeRequired 一直是true
viewDelegate myDelegate = new viewDelegate(view);
myDelegate.Invoke(s);
}
else
{
form2.lable.text=s;
}
}
大家帮帮忙 给解决一下
private void view( string s)
{
if (this.InvokeRequired )
{
//程序执行到这里以后,上边的判断this.InvokeRequired 一直是true
viewDelegate myDelegate = new viewDelegate(view);
myDelegate.Invoke(s);
}
else
{
form2.lable.text=s;
}
}这个对吗?
{
while(true)
{
DrawMap("123");
}
}这个函数在自调递归?
private delegate void viewDelegate (string s);
private void map_Load(object sender, EventArgs e)
{
Thread threadListen = new Thread(new ThreadStart(DrawMap));
threadListen.Start();
viewDelegate myDelegate = new viewDelegate(view);
}private void DrawMap ( )
{
while(true)
{
form2.lable.invoke(myDelegate,"123");
}
}private void view( string s)
{
form2.lable.text=s;
}
private void DrawMap ( )
{
while(true)
{
DrawMap("123");
}
}
//用同样的方法改一下DrawMap("123");
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Threading;namespace DelegateSample
{
/// <summary>
/// 这里声明一个委托供线程调用
/// </summary>
/// <param name="txt"></param>
public delegate void AppendTextHandler(string txt);public partial class Form1 : Form
{
Thread m_trd = null;
//实例化一个委托对象
AppendTextHandler m_handler = null;public Form1()
{
InitializeComponent();
}/// <summary>
/// 窗体Load 事件
/// </summary>
/// <param name="e"></param>
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
//实例化一个委托对象
m_handler = new AppendTextHandler(AppendTextText);//开启新线程
m_trd = new Thread(new ThreadStart(OtherThreadDoSomething));
m_trd.Start();
}/// <summary>
/// 关闭窗体时结束创建的线程
/// </summary>
/// <param name="e"></param>
protected override void OnClosed(EventArgs e)
{
base.OnClosed(e);
if (m_trd != null)
{
m_trd.Abort();
}
}/// <summary>
/// 线程执行的方法
/// </summary>
private void OtherThreadDoSomething()
{
string _str;
while (Thread.CurrentThread.ThreadState!=ThreadState.Aborted)
{//线程未请求终止就一直执行
_str = System.Guid.NewGuid().ToString();
AppendTextText(_str);
Thread.Sleep(50);//可去掉
}
}/// <summary>
/// 向当前窗体控件中增加文本
/// </summary>
/// <param name="txt"></param>
private void AppendTextText(string txt)
{
if (this.richTextBox1.InvokeRequired)
{//调用方在另外一个线程中
//在拥有此控件的线程上执行委托指向的方法
this.richTextBox1.Invoke(m_handler, txt);
}
else
{//调用方在当前线程中
this.richTextBox1.AppendText(txt + "\r\n");//增加文本
this.richTextBox1.ScrollToCaret();//滚动到当前目录
}
}
}
}