winform 多线程程序如何读取窗体上控件的值?
winform 多线程程序 写入窗体上控件的值,MSDN上有例子,可要读取值该怎么处理呢?
delegate void SetTextCallback(string text);
private void SetText(string text)
{
if (this.textBox1.InvokeRequired)
{
SetTextCallback d = new SetTextCallback(SetText);
this.Invoke(d, new object[] { text });
}
else
{
this.textBox1.Text = text;
}
}
--------------------编程问答-------------------- 把整个Form定义加个Volatile关键字,可以直接从不同的线程访问,就是安全性不太好. --------------------编程问答-------------------- 不能直接读吗? --------------------编程问答-------------------- delegate string GetTextCallback();
private string GetText()
{
string rtext;
if (this.textBox1.InvokeRequired)
{
GetTextCallback d = new GetTextCallback(GetText);
this.Invoke(d);
}
else
{
rtext=this.textBox1.Text;
}
return rtext;
}
不知道这样行不行 没有试 你可以试一下 --------------------编程问答-------------------- 参考 --------------------编程问答-------------------- 采用委托+事件 --------------------编程问答-------------------- 加lock会降低多线程带来的性能提高,只能加Volatile关键字了 --------------------编程问答-------------------- mark. --------------------编程问答-------------------- 直接读取最好不要用,用类与类之间传递值方式吧。例如:
class a
{
public a(string s)
{
}
}
class b
{
public void f()
{
a a1 = new a("s");
}
}
在构造函数里面传递值 --------------------编程问答-------------------- 希望对你又帮助 --------------------编程问答-------------------- 根据实际需要使用。可以使用异步委托的方式来处理,因为只是读取,所以是线程安全的。 --------------------编程问答--------------------
up --------------------编程问答-------------------- //vs2008下通过
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Threading;
namespace WindowsFormsApplication4
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
ReceiveClass myReceiveClass = new ReceiveClass(this,textBox1);
Thread ListenThread = new Thread(new ThreadStart(myReceiveClass.ReceiveMessage));
ListenThread.Start();
}
}
class MyEventArgs : EventArgs
{
public string InsertText;
}
class ReceiveClass
{
private Form1 mySender;
private TextBox pTextBox;
public ReceiveClass(Form1 Sender, TextBox TextBox1)
{
mySender = Sender;
pTextBox = TextBox1;
}
public void ReceiveMessage()
{
//解决跨线程调用windows窗体控件
MyEventArgs MyMessage = new MyEventArgs();
mySender.Invoke(new EventHandler(readText), new object[] { mySender, MyMessage });
//读取form1 上textBox1.Text 的值
string s=MyMessage.InsertText ;
}
private void readText(object sender, EventArgs e)
{
MyEventArgs ec = (MyEventArgs)e;
ec.InsertText=pTextBox.Text;
}
}
}
http://www.mybuffet.cn --------------------编程问答--------------------
up
补充:.NET技术 , C#