c# - 错误:IsObjectMonoBehaviour 只能从主线程调用
问题描述
我正在尝试在 Unity 中从另一个脚本中引用一个脚本。其中一个脚本 (API.cs) 正在向服务器发送 Post 请求,而另一个 (Main.cs) 正在尝试运行其 Post() 方法。
但是,我在 Unity 调试器中看到以下错误消息:
IsObjectMonoBehaviour 只能从主线程调用。
加载场景时,构造函数和字段初始化程序将从加载线程中执行。
不要在构造函数或字段初始化程序中使用此函数,而是将初始化代码移至 Awake 或 Start 函数。
UnityEngine.MonoBehaviour:StartCoroutine(IEnumerator)
API:Post(MonoBehaviour) (在 Assets/Scripts/API.cs:7)
Main:m__0() (在 Assets/Scripts/Main.cs:13)
System.Threading._ThreadPoolWaitCallback:PerformWaitCallback()
我认为这个错误与从 StartCoroutine() 方法中调用非静态方法 PostRequest() 有关。但是,我不能将 IEnumerator 设为“公共静态”。
这是我在 C# 和 Unity 中做过的第一个项目,我在这里有点不知所措......
非常感谢您的意见!
主文件
using System.Collections;
using System.Collections.Generic;
using System.Threading.Tasks;
using UnityEngine;
public class Main : MonoBehaviour {
void Start() {
Task one = Task.Run(() => {
API api = new API();
api.Post(this);
});
one.Wait(-1);
}
}
API.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class API {
public void Post(MonoBehaviour instance) {
instance.StartCoroutine(PostRequest());
}
IEnumerator PostRequest() {
...
}
}
解决方案
推荐阅读
- pandas - 从字典列表构造 DataFrame
- java - 如何在每 10 个单词后拆分一个字符串?
- gtk3 - Gtk3 TextView修改字体大小并在屏幕上保留当前可见文本
- node.js - 如何获取 adonis jakefile 中的所有路由?
- c# - setColumnDefs 函数调用服务器端 C# 代码 2 次
- python - 试图将标准极星变成更优雅的椭圆
- vue.js - “错误”未在实例上定义,但在渲染期间引用
- curl - 带有 curl 的 Linux 脚本,用于检查以递归方式检查 Web 服务是否已启动
- c# - EF6 - EmailAddress 属性不会自动验证
- python - 尝试使用 python 将 kdb 转换为 csv,除一列外,所有内容都正确转换