在c#中调用表单对象的方法问题

时间:2011-07-19 11:33:12

标签: c# forms object invoke

我正在使用C#开发一个聊天应用程序,我们正在使用System.Timer.Timer来频繁获取新请求和区域请求的数据。

运行正常,但每当我们创建新实例时,都会发生交叉线程操作异常。

这是我的代码:

frmchat f = new frmchat();
MethodInvoker method = new MethodInvoker(delegate()
{
    f.Name = "xyz";f.Show();
});
if (f.InvokeRequired)
{
    f.Invoke(method);
}
else
{
    method();
}

这会创建一些聊天表单。

2 个答案:

答案 0 :(得分:1)

我猜你的问题是新的表单只能在UI线程上创建。如果可能,尝试使用Windows.Forms.Timer。这将自动为您重新调用正确的线程上的事件。

答案 1 :(得分:0)

如果您在该计时器的已用事件处理程序中创建该表单,请改用this.Invoke,例如:

this.Invoke(new MethodInvoker(() =>
{
    frmchat f = new frmchat();
    f.Name = "xyz";
    f.Show();
}