【发布时间】:2014-06-11 03:10:50
【问题描述】:
我想在我的应用中做一些耗时但对实际游戏没有影响的事情。因此我试图使用一个线程来单独运行这些东西。以下是我创建线程的方式:
Thread thread = new Thread(() => WriteCheckpointTextFile (myFileName, checkpoint));
thread.Start();
这是我在 WriteCheckpointTextFile 中运行的代码:
void WriteCheckpointTextFile (string fileName, Checkpoint checkpoint)
{
string checkpointToText = "";
checkpointToText += CheckpointDataNames.nextMarker + Environment.NewLine;
checkpointToText += checkpoint.nextMarker + Environment.NewLine;
checkpointToText += "%" + Environment.NewLine;
checkpointToText += CheckpointDataNames.difficulty + Environment.NewLine;
checkpointToText += checkpoint.difficulty.ToString () + Environment.NewLine;
checkpointToText += "%" + Environment.NewLine;
checkpointToText += CheckpointDataNames.musicObject + Environment.NewLine;
checkpointToText += checkpoint.musicObject + Environment.NewLine;
checkpointToText += "%" + Environment.NewLine;
checkpointToText += CheckpointDataNames.gameTimePassed + Environment.NewLine;
checkpointToText += checkpoint.gameTimePassed.ToString () + Environment.NewLine;
checkpointToText += "%" + Environment.NewLine;
checkpointToText += CheckpointDataNames.storedStats + Environment.NewLine;
checkpointToText += EndRaceDataString (checkpoint.storedStats);
checkpointToText += "%" + Environment.NewLine;
checkpointToText += CheckpointDataNames.pursuers + Environment.NewLine;
foreach (PursuerData p in checkpoint.pursuers) {
checkpointToText += p.pursuerName + "," + p.pursuerNextMarker + "," + p.pursuerPosition.x.ToString () + "," + p.pursuerPosition.y.ToString () + "," + p.pursuerPosition.z.ToString () + Environment.NewLine;
}
checkpointToText += "%" + Environment.NewLine;
#if !UNITY_WEBPLAYER
System.IO.File.WriteAllText (fileName, checkpointToText);
#endif
Debug.Log("Finished writing text to file");
}
现在由于某种原因,最后一次调试并不总是被打印出来,而且我的文件并不总是被写入。这可能是什么原因造成的?
【问题讨论】:
-
你总是可以添加更多的调试打印来查看它到底在哪里停止。尝试将 WriteAllText 方法包装在 try-catch 中并记录异常。另外,如果您使用 async 和 await,您的代码表现如何?
-
您的进程是终止还是不打印到调试窗口?
-
我将添加更多调试以找出它停止的确切位置。据我所知,writealltext 没有引发任何异常,但让我回复您。
-
@kUr4m4:另外,
checkpoint.storedStats的类型是什么?我敢打赌它是一个集合(比如List<Stat>),你在EndRaceDataString方法中用foreach(var stat in storedStats)循环迭代它,它抛出一个InvalidOperationException说“集合已修改;枚举操作可能不会执行” -
哇,你会赢的!这是一个例外:集合被修改;枚举操作可能无法执行。
标签: c# multithreading io unity3d