我正在寫一個國際象棋遊戲,它允許兩個程序競爭,玩家需要寫一個DLL並公開一個函數來告訴主應用程序這個玩家將在下一步移動,假設函數看起來像老問題:如何立即殺死一個線程在c#
public static void MoveNext(out int x, out int y, out int discKind);
在象棋遊戲應用時,我開始一個新的線程來調用播放器的DLL暴露得在那裏他將在轉彎移動的功能,我開始一個計時器,以防止玩家超時
private Thread mPlayerMoveThread;
private void SetPlayerToMove(IPlayer player)
{
this.CurrentPlayer = player;
try
{
System.Threading.Timer mTimeoutTimer =
new Timer(new TimerCallback(TimeIsUp),
null,
this.mMaxTimeOfOnePlayer,
Timeout.Infinite);
mPlayerMoveThread = new Thread(this.ThreadMethodPlayerAction);
mPlayerMoveThread.IsBackground = true;
mPlayerMoveThread.Start();
}
catch(Exception ex)
{
//// invalid move, so finish the game
HandleInvalidMove(player.Color, ex);
}
}
private void ThreadMethodPlayerAction()
{
this.CurrentPlayer.MoveNext();
}
private void KillThread(Thread thread)
{
if (thread == null || thread.ThreadState == ThreadState.Stopped)
return;
try
{
thread.Abort();
thread.Join();
}
catch
{
}
finally
{
thread = null;
}
}
private void TimeIsUp(object state)
{
// kill the threads
KillThread(mPlayerMoveThread);
HandleInvalidMove(this.CurrentPlayer.Color, new Exception("timeout"));
}
我的問題是: 我的功能KillThread正確地殺死一個線程?如果不是的話,我應該怎麼做才能阻止他們?
我喜歡'AppDomain'的想法,你會給我一些簡單的代碼來說明如何做到這一點? – 2011-03-10 05:31:09
我還沒有和他們合作過。但是'Hosting'和'AppDomain'應該給出一些搜索結果。如果您需要沙盒,我建議您查看.net 4模型,它比舊模型更容易。 – CodesInChaos 2011-03-10 08:37:53