我有一个Unity程序,在初始化时会在场景中加载多个Gameobjects。从文件加载的对象。
我创建了一个FileWatcher,可以在文件发生变化时通知。现在我想用更新文件的内容更新我的游戏对象
public class ProductFolderWatcher : MonoBehaviour {
// Use this for initialization
void Start () {
var fileSystemWatcher = new FileSystemWatcher();
fileSystemWatcher.Path = "C:/Users/Bram Sikkens/Desktop/SealifeBestanden/ProductBestanden/";
fileSystemWatcher.Changed += FileSystemWatcher_Changed;
fileSystemWatcher.EnableRaisingEvents = true;
}
private static void FileSystemWatcher_Changed(object sender, FileSystemEventArgs e)
{
string filename = e.Name;
Debug.Log(filename + "has changed");
GameObject coldBeveragesProductContainer = GameObject.Find("ColdBeveragesProductContainer");
}
当我执行以下代码时,我收到错误
“查找只能在主线程中执行”
如何解决这个问题?
答案 0 :(得分:0)
你的FileSystemWatcher是否在另一个线程上运行操作?
看起来它正在从另一个线程发送它的事件,在这种情况下,查找无法正常工作。
然而,静态FileSystemWatcher_Changed可能是非静态的。尝试删除它,看看它是否有所改善。
否则,如果你的FileSystemWatcher在另一个线程上运行,一个简单的解决方法就是从FileSystemWatcher_Changed方法中移除静态(无论如何都可能修复它),并使filename变量成为类级别变量,即private _filename,并移动将GameObject.Find代码放入更新例程中,在您执行的操作后将文件名为空。
如果您从单一行程更新例程开始操作,那么您就可以在主线程上进行操作了 - 这就是您想要的位置。