我正在用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