試圖圍繞我的腦袋爲什麼執行回調的窗體不起作用。SynchronizationContext上的回調
我想要做的事:
- 按下一個按鈕和一個服務被調用。
- 服務回調的形式(函數具有IsOneWay =真)
- 形式更新GUI相應
有UseSynchronizationContext虛假和GUI上的成員調用調用工作正常:
[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; });
}
}
}
但UseSynchronizationContext =真實和直接調用成員不會:
[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;
}
}
無論使用SyynchronizationContext沒有字面上
SynchronizationContext.Current.Send(_=> picBox.Visible = true, null);
如果第二和第三個版本還工作嗎?該回調稱爲OneWay,因此服務在回調後繼續。
callbackbehavior放置正確是,表單實現了回調。我將嘗試存儲SynContext現在 – Laurijssen
的確,在InitializeComponent工作後存儲SynContext – Laurijssen
我不同意實際上關注的問題。一個實現回調的表單,其唯一目的是更新表單對我來說看起來不錯 – Laurijssen