请问一个关于多线程的问题
我自定义了一个类A
public class A
{
public string pp = "sfaf ";
Thread _thread;
public event EventHandler OnChanged = null;
private void Do()
{
while (true)
{
StateChanged();
Thread.Sleep(1000);
}
}
public void Start()
{
StateChanged();
_thread = new Thread(new System.Threading.ThreadStart(Do));
_thread.Start();
}
public void Stop()
{
StateChanged();
if (_thread != null)
_thread.Abort();
}
}
其中使用了事件委托,我在窗体Form里面 这样操作:
private void button2_Click(object sender, EventArgs e)
{
k = new A();
k.OnChanged += new EventHandler(tt);
k.Start();
}
void tt(object obj, EventArgs ea)
{
button1.Text = k.pp;
}
程序运行到提示子线程的StateChanged();时就会提示“线程间操作无效: 从不是创建控件“button1”的线程访问它。” 请问怎么解决多线程之间的事件操作问题?
[解决办法]
可以实现楼主想要的效果。
在你的Class A中的构造函数中,加一个参数,如:
private Form mobjForm;
public A(Form owner)
{
mobjForm=owner;
}
然后Do方法中这样写:
void Do()
{
while(true)
{
mobjForm.Invoke(OnChanged,new object[]{this,EventArgs.Empty});
Sleep(1000);
}
}
这样每次有StateChange事件后,在事件中直接调用主线程控件,而不必每次再用Invoke