我正在使用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();
}
这会创建一些聊天表单。
答案 0 :(得分:1)
我猜你的问题是新的表单只能在UI线程上创建。如果可能,尝试使用Windows.Forms.Timer。这将自动为您重新调用正确的线程上的事件。
答案 1 :(得分:0)
如果您在该计时器的已用事件处理程序中创建该表单,请改用this.Invoke
,例如:
this.Invoke(new MethodInvoker(() =>
{
frmchat f = new frmchat();
f.Name = "xyz";
f.Show();
}