왜 콜백을 구현하는 Windows Form이 작동하지 않는지에 대해 머리를 감싸려고합니다.SynchronizationContext의 콜백
내가 할 노력하고있어:
- A 버튼을 누르면 및 서비스가 호출됩니다.
:[CallbackBehavior(UseSynchronizationContext = false)] public class DeliveryClient : System.Windows.Forms.Form, ICallback { public void ServiceCallback(string system, string state, string extraInfo) { if (state == "start") { Invoke((MethodInvoker)delegate { picBox.Visible = true; }); } else { Invoke((MethodInvoker)delegate { picBox.Visible = false; }); } } }
- 서비스는 형태로 다시 호출
- 양식 업데이트 GUI 그에 따라 거짓에 UseSynchronizationContext을 갖고, GUI 회원에 호출을 호출
잘 작동 (함수는 = 사실 IsOneWay가있다) 멤버를 호출
그러나 UseSynchronizationContext = true를 직접하지 않습니다 :
[CallbackBehavior(UseSynchronizationContext = true)]
public class DeliveryClient : System.Windows.Forms.Form, ICallback
{
public void ServiceCallback(string system, string state, string extraInfo)
{
if (state == "start")
{
picBox.Visible = true;
}
else
{
picBox.Visible = false;
}
}
어느 두 번째와 세 번째 버전도 작동해야 문자 그대로
SynchronizationContext.Current.Send(_=> picBox.Visible = true, null);
SyynchronizationContext를 사용합니까? OneWay라고하는 콜백이므로 콜백 후에도 서비스가 계속됩니다.
callbackbehavior가 올바르게 배치됩니다. 올바른 경우 양식에서 콜백을 구현합니다.나는 지금 SynContext를 저장하려고 시도 할 것이다. – Laurijssen
사실, InitializeComponent가 작동 한 후에 SynContext를 저장한다. – Laurijssen
나는 실제로 관심사의 sep에 동의하지 않는다. 양식을 업데이트하는 것이 유일한 목적 인 콜백을 구현하는 양식 – Laurijssen