안녕이 심하게 설명하는 경우 :특정 스레드에서 방법 설정/속성을 실행
하는의 나는 두 개의 클래스가 있다고 가정 해 봅시다 모두 나는 종류의 새로운이 멀티 스레딩 물건의 모든 너무 실례하시기 바랍니다 이니
class abc {
public string SomeProperty {
get { return something; }
set { /* This code has to execute in the main application thread */ }
}
public void SomeMethod() {
/* This code also has to execute in the main application thread */
}
}
class def {
abc obj;
public def() {
abc = new obj();
}
public void SomeMethod() {
abc.SomeProperty = "SomeValue";
abc.SomeMethod();
}
}
문제는 SomeProperty 및 SomeMethod가 주 응용 프로그램 스레드에서 실행되는 것입니다. 나는 시도했다 :
abc.GetType().InvokeMember("SomeProperty", System.Reflection.BindingFlags.SetProperty, null, abc, new object[] { "SomeValue" });
abc.GetType().InvokeMember("SomeMethod", System.Reflection.BindingFlags.InvokeMethod, null, abc, null);
그러나, 기본 응용 프로그램 스레드에서 실행하는 데 필요한 코드는 주 응용 프로그램 스레드에서 실행되지 않는, 심지어 (내가 그렇게 어쨌든 생각하지 않는다) 내가 가진 InvokeMember에를 사용하여 코드에서 현재 스레드 이름을 출력하려고 시도했으며 주 응용 프로그램 스레드 이름을 출력하지 않습니다.
내가 할 수있는 방법이 있습니까? 만약 내가 일을 나쁘게 설명했다면 알려주세요 :) 고마워요!
설명하십시오 ** 왜 ** 당신은 실행해야 그 코드는 메인 (또는 다른 무엇이든) 스레드에 있습니다. 'InvokeMember'를 사용하는 당신의 접근법은 단지 틀린 말일뿐입니다. 당신의 의도를 분명히하지 않고는 실제 상황에 맞는 정말 유용한 답을 기대할 수 없습니다. –
그리고 WinForms 또는 WPF를 지정하십시오 –
정보 부족에 대해 사과드립니다. 이것은 WinForms 또는 WPF가 아니라 콘솔 응용 프로그램입니다.메인 스레드에서 실행해야하는 많은 이유가 있습니다. 그 중 하나는 Lidgren 네트워크 라이브러리를 사용하는 응용 프로그램을 구축하고 있기 때문에 라이브러리가 수신하는 스레드에서만 네트워크 메시지를 보낼 수 있기 때문입니다. – Jamie