Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 尝试使用线程在后台保存文件_C#_Multithreading_Unity3d - Fatal编程技术网

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

C# 尝试使用线程在后台保存文件,c#,multithreading,unity3d,C#,Multithreading,Unity3d,因此,我尝试使用线程在后台保存文件,以防止unity主线程在文件保存之前冻结: public void SaveMap() { MapRendererBehaviour mapRendererBehaviour = GameObject.FindWithTag("MapRenderer").GetComponent<MapRendererBehaviour>(); SerializedMap serializedMap = mapRendererBehaviour.ToSer

因此,我尝试使用线程在后台保存文件,以防止unity主线程在文件保存之前冻结:

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);
  });
}
public void SaveMap(){
MapRenderBehavior MapRenderBehavior=GameObject.FindWithTag(“MapRenderer”).GetComponent();
SerializedMap SerializedMap=MapRenderBehavior.ToSerializedData();
调试日志(“测试”);
_saveMapThread=新线程(()=>{
字符串saveMapJson=JsonConvert.SerializeObject(serializedMap);
WriteAllText(_saveMapFilePath,saveMapJson);
});
}
由于某些原因,线程代码似乎没有执行,因为文件没有保存。如果我注释掉了线程创建,并将线程主体保留在那里,那么文件将正确保存


任何人都知道我在这里可能做错了什么(我假设我在做一些愚蠢的事情,因为我以前从来没有尝试过使用线程)。

这可能是一个冒险,但是如果你使用命名线程而不是任务,你通常必须在后面说ThreadName.Start(),例如在声明线程之后说:

_saveMapThread.Start();

你能团结一致地使用任务吗<代码>任务.运行(…)可能会更安全一点?很好的一点axlj,但是我不认为你可以通过这篇文章的外观来升级!:-)真的!似乎最新版本有一些很好的新功能。调用
.Start()
(我查找的两个线程示例中都没有)确实解决了我的问题。