【发布时间】:2011-02-03 22:35:30
【问题描述】:
我正在使用 c# .net 制作一个 winform 应用程序。此应用程序在后台线程中运行算法以进行计算。但是我有 2 种不同的算法来计算相同的,我想在运行时在它们之间切换。这些算法每 5 秒运行一次,因此它们是无限的。我尝试过的,用策略模式实现的,线程运行抽象方法。当我点击一个菜单项时,我改变了具体的策略对象,所以方法是一样的,但实现会不同。但这对我不起作用,旧算法不断运行,我从一开始就开始了。 所以总结一下。有没有办法在运行时更改正在运行的线程方法?
感谢您的帮助。
示例代码:
//线程启动上下文对象的方法,调用抽象策略算法方法
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
更新:感谢大家的帮助,我对编程有点笨,所以我以我的方式尝试了你的建议。我不确定这是否是解决我的问题的正确方法,但似乎可行。我将线程从具体策略对象移到上下文对象。
【问题讨论】:
-
抱歉,您的问题含糊不清,很难给出适当的答复。
-
贴一些代码,看起来你调用了一次工厂,所以你感觉不到请求的变化
标签: c# multithreading