유니티 에디터에서 파일 시스템 감시자를 사용할 수있는 스레드 안전 클래스가 필요합니다. 이미 스레딩이 코 루틴에서 가능하지는 않지만 스레드 스레딩이 불가능하다는 것을 알고 있습니다. 편집기에서도 허용됩니다.스레드 안전 파일 시스템 감시자 유니티 에디터
get_isEditor can only be called from the main thread. Constructors and field initializers will be executed from the loading thread when loading a scene. Don't use this function in the constructor or field initializers, instead move initialization code to the Awake or Start function. 0x0000000140E431ED (Unity) StackWalker::GetCurrentCallstack 0x0000000140E44EE1 (Unity) StackWalker::ShowCallstack 0x00000001405FC603 (Unity) GetStacktrace 0x00000001405F97FE (Unity) DebugStringToFile 0x00000001405F9C5C (Unity) DebugStringToFile 0x000000014035F7B3 (Unity) ThreadAndSerializationSafeCheckReportError 0x0000000140E7B988 (Unity) Application_Get_Custom_PropIsEditor 0x0000000015AC46AA (Mono JIT Code) (wrapper managed-to-native) UnityEngine.Application:get_isEditor() 0x0000000015AC42FE (Mono JIT Code) [Helpers.cs:585] Lerp2API.DebugHandler.Debug:Log (object) 0x0000000015AC41C2 (Mono JIT Code) [Helpers.cs:578] Lerp2API.DebugHandler.Debug:Log (string) 0x0000000015AC40F7 (Mono JIT Code) [LerpedEditorCore.cs:101] Lerp2APIEditor.LerpedEditorCore:Recompile (object,System.IO.FileSystemEventArgs) 0x0000000015AC3F2D (Mono JIT Code) (wrapper runtime-invoke) :runtime_invoke_void__this___object_object (object,intptr,intptr,intptr) 0x00007FFB400A519B (mono) [mini.c:4937] mono_jit_runtime_invoke 0x00007FFB3FFF84FD (mono) [object.c:2623] mono_runtime_invoke 0x00007FFB3FFFE8F7 (mono) [object.c:3827] mono_runtime_invoke_array 0x00007FFB3FFFEBCC (mono) [object.c:5457] mono_message_invoke 0x00007FFB4001EB8B (mono) [threadpool.c:1019] mono_async_invoke 0x00007FFB4001F5E2 (mono) [threadpool.c:1455] async_invoke_thread 0x00007FFB4002329F (mono) [threads.c:685] start_wrapper 0x00007FFB400D78C9 (mono) [win32_threads.c:599] thread_start 0x00007FFB77FC8364 (KERNEL32) BaseThreadInitThunk
내가 문제가 될 수 있습니다 인식하는 모든 도우미를 만들기 위해 전체 스택 트레이스를 복사 :
그래서, 내 오류가 있습니다. 어떤 안전 FWS 스레드 좋아하기 때문에, 나는, 솔루션 검색 및 예, 그러나 .NET 4, 하나가, 내가 .NET 2
하나가 필요합니다 이건 내 코드입니다 :
using System.IO; //class, namespace, redundant info...
private static FileSystemWatcher m_Watcher;
[InitializeOnLoadMethod]
static void HookWatcher()
{
m_Watcher = new FileSystemWatcher("path", "*.cs");
m_Watcher.NotifyFilter = NotifyFilters.LastWrite;
m_Watcher.IncludeSubdirectories = true;
//m_Watcher.Created += new FileSystemEventHandler(); //Add to the solution before compile
//m_Watcher.Renamed += new FileSystemEventHandler(); //Rename to the solution before compile
//m_Watcher.Deleted += new FileSystemEventHandler(); //Remove to the solution before compile
m_Watcher.Changed += Recompile;
m_Watcher.EnableRaisingEvents = true;
}
private static void Recompile(object sender, FileSystemEventArgs e)
{
Debug.Log("Origin files has been changed!");
}
은 아무것도 당신이 볼 수있는 ... 나는이었다 보았다
상기 FSW이이 특별한
이 나의 목적은 간단하다, 나는 나의 현재 유니티 프로젝트에서 분리 된 DLL을, 아이디어는 간단하지 , 나는 변화가있을 때 Unity로부터 자동으로 모든것을 다시 컴파일하고 싶다. DLL의 프로젝트에서 변경되었지만 스레드로 인해이를 수행 할 수 없으므로 어떻게해야합니까? Unity와 호환되는 파일을 듣는 다른 방법이 있습니까?
감사합니다.
저는 맞춤 제작 된 SynchronizingObject를 할당하는 것이 더 편입니다. – aeroson