ich stark UniRx in meinem Projekt verwenden, aber ich finde, ein Problem, wenn ich es zuerst SchedulerOn(Scheduler.MainThread)
Anruf nicht wie diese in Haupt thread.Uses Code links Dinge tun:UniRx SchedulerOn Mainthread arbeitet nicht zum ersten Mal aufrufen
Login (new LoginReq (account.text, pwd.text, 1L)).SchedulerOn(Scheduler.MainThread).Done (x => {
Debug.Log("login req thread - " + System.Threading.Thread.CurrentThread.ManagedThreadId);
Package.Log("Login response - " + x.ToString());
if(x.errorMsg == null) {
Package.Log("login success - " + x.ToString());
//choice game world -> choice role
enterObj.SetActive(true);
loginObj.SetActive(false);
} else {
rspTips.text = x.ToString();
}
});
Die Ausgabe zeigt SetActive kann nur am Haupt-Thread aufgerufen werden.
Das Problem trat besonders dann auf, wenn ich den PC öffne und die Anwendung starte.
Ist es wegen .NET aufwärmen? Ich bin mir nicht sicher, wie der Thread-Versand funktioniert.
UPDATE
Ich denke, ich bin ein paar wichtige Dinge verloren.
Login
return RSG.IPromise<T>
(git home page at here), die zu leichten asyc Aufgabe verwendet, aber RSG.Promise
lib nicht Scheduler hat module.So Ich wickle ich ein SchedulerPromise
mit UniRx
‚s IScheduler
und der Code nicht neue Technologie hat. See this please about the wrapper source code
Ich bin hier eine lange Zeit stecken geblieben. Danke irgendeinen Rat.
In welcher Bibliothek/Namensraum ist 'SchedulerOn' wirklich? – supertopi
@supertopi, es entspricht "SubscribeOn", sorry nicht erklären this.Ich füge ein Detail bei ** UPDATE ** – LoranceChen
Wenn ich versuche Unity-Code von einem Observer zu bekommen bekomme ich 'kann nur aus dem Haupt-Thread aufgerufen werden. Konstruktoren und Feldinitialisierer werden beim Laden einer Szene vom Lade-Thread ausgeführt. ' Wenn ich nicht '.ObserveOnMainThread()' – sentece