我正在用c#.net制作一个winform应用程序。此应用程序在后台线程中运行算法以进行计算。但是我有两个不同的algortihm来计算相同的数值,我想在运行时切换它们。这些算法每5秒运行一次,所以它们是无限的。我所尝试的是用策略模式实现的,而线程则运行抽象方法。而当我点击一个menuitem时,我更改具体的策略对象,所以方法将是相同的,但实现将有所不同。但它不适用于我,旧的算法不断运行,我从头开始。 所以总之。有没有办法在运行时更改正在运行的线程方法?运行时在线程中切换运行方法
谢谢你的帮助。
示例代码:
//线程开始上下文对象的方法,它调用,抽象的策略算法方法
appList = new RunAppList();
myThread = new Thread(new ThreadStart(appList.Measure));
myThread.IsBackground = true;
//在这些方法我想切换,我设置了concretestrategy对象,通过该resultcallback代表的结果,这些对象返回
public void OnPowerSet(object sender, EventArgs e)
{
try
{
appList.SetMeasureAlgorithm(new WindowMeasureWithPowerSet(new ListCallback(ResultCallBack)));
if (!myThread.IsAlive)
myThread.Start();
}
catch (ThreadStartException te)
{
Console.WriteLine(te.ToString());
}
}
public void OnPolygon(object sender, EventArgs e)
{
appList.SetMeasureAlgorithm(new WindowMeasureWithPoligon(new ListCallback(ResultCallBack)));
if (!myThread.IsAlive)
{
myThread.Start();
}
}
enter code here
更新:感谢大家的帮助,即时通讯有点dumm的编程,所以我尝试,而不是你的意见,在我的方式。我不确定这是否是我的问题的正确解决方案,但似乎有效。我将线程从具体策略对象移到了上下文对象。
对不起,您的问题含糊不清,很难给出适当的回答。 – mquander 2011-02-01 17:05:26
发布一些代码,它看起来像你曾经打电话给工厂,所以你不能感觉到所要求的变化 – 2011-02-01 17:10:19