我的表单从随机工作线程上的另一个对象接收异步回调。我一直在使用代理将数据传递给主线程(可用于更新屏幕控件),如下所示。性能是可怕的 - 一旦我达到每秒500次更新,程序完全锁定。我的GUI处理本身不是问题,因为我可以在窗体中模拟这种级别的更新并且没有问题。我应该使用更有效的机制将数据从线程切换到线程吗?Windows窗体线程和事件 - 切换事件的最有效方式?
delegate void DStatus(MyStatus obj);
DStatus _status; // set to MainThreadOnStatus during construction
// this function only called on form's owner thread
void MainThreadOnStatus(MyStatus obj)
{
// screen updates here as needed
}
// this function called by arbitrary worker threads in external facility
void OnStatus(MyStatus obj)
{
this.BeginInvoke(_status, obj);
}
MarshalByRefObject对单个appdomain中的线程边界有影响吗?我认为它只适用于你有多个应用程序域。 – Eric 2008-09-24 23:15:10