尝试使用线程在后台保存文件

rya*_*zec 0 c# multithreading unity-game-engine

所以我试图使用线程在后台保存文件,以防止主统一线程冻结,直到文件被保存:

public void SaveMap() {
  MapRendererBehaviour mapRendererBehaviour = GameObject.FindWithTag("MapRenderer").GetComponent<MapRendererBehaviour>();
  SerializedMap serializedMap = mapRendererBehaviour.ToSerializedData();

  Debug.Log("test");
  _saveMapThread = new Thread(() => {
    string saveMapJson = JsonConvert.SerializeObject(serializedMap);

    File.WriteAllText(_saveMapFilePath, saveMapJson);
  });
}
Run Code Online (Sandbox Code Playgroud)

由于某种原因,线程代码似乎没有执行,因为文件没有被保存.如果我注释掉线程创建并将线程的主体留在那里,文件将正确保存.

任何人都知道我在这里做错了什么(我假设我做了一些愚蠢的事情,因为我之前从未尝试过使用过线程).

Sha*_*dow 7

这可能是在黑暗中拍摄但如果你使用命名线程而不是任务,你通常必须在之后说ThreadName.Start(),例如在声明线程之后说:

_saveMapThread.Start();
Run Code Online (Sandbox Code Playgroud)

  • 时间升级!http://www.stevevermeulen.com/index.php/2017/09/23/using-async-await-in-unity3d-2017/ :-) (2认同)