【发布时间】:2011-09-29 07:43:50
【问题描述】:
我正在开发一个非常复杂的 winforms 应用程序,并且有大量的回调链在各处传递。
作为一个基于此代码的松散示例,可能有一个“Manager”类,它产生一个“SetUpWorkerThreads”类,它为 10 个工人创建一个“HandleWorker”线程。 工作线程有时需要回调管理器类,代码如下:
public class Manager
{
public delegate void SomethingHappenedHandler();
private void Init()
{
var x = new SetUpWorkerThreads(SomethingHappened);
}
private void SomethingHappened()
{
// Handle something happened
}
}
public class SetUpWorkerThreads
{
private readonly Manager.SomethingHappenedHandler _somethingHappened;
public SetUpWorkerThreads(Manager.SomethingHappenedHandler somethingHappened)
{
_somethingHappened = somethingHappened;
}
public void SetupTheThreads()
{
// Contrived!
for (int x=0; x<10; x++)
{
var worker = new Worker(_somethingHappened);
new Thread(worker.DoingSomething).Start();
}
}
}
public class Worker
{
private readonly Manager.SomethingHappenedHandler _somethingHappened;
public Worker(Manager.SomethingHappenedHandler somethingHappened)
{
_somethingHappened = somethingHappened;
}
public void DoingSomething()
{
// ... Do Something
_somethingHappened();
}
}
实际上,可能涉及更多类,每个类都为各种事情传递大量回调。我意识到糟糕的类/应用程序设计在其中发挥了作用,但是有没有更好的方法来处理类之间的这些交互,特别是在 winforms 应用程序中,以及在进行大量线程处理时?
【问题讨论】:
标签: c# winforms multithreading delegates callback