我現在正在通過使用silverlight和web服務(asmx頁面)控制設備的項目。該項目流程如下:如何同步Silverlight中的WebService操作?
按下silverlight用戶界面上的按鈕,它會通過使用套接字發送一個包到中間線。然後middlewire將接受包並解構它並返回另一個包到silverlight UI。我使用下面的代碼加載按鈕狀態,這將觸發數據庫查詢:
private ButtonStateModel _buttonStateModel = new ButtonStateModel() { BtnOneImage = "Skins/images/flag/QU.png", BtnOneVisible = Visibility.Visible, BtnTwoVisible = Visibility.Collapsed };
public ButtonStateModel ButtonStateModel
{
get
{
ButtonStateModel btnState = null;
dataService.GetPR(BusEquipmentPermission.Control.RtuID, BusEquipmentPermission.Control.DevID, (result) =>
{
if (result != null && result.Count > 0)
{
var flag = result[0].PRFlag;
if (flag == 1)
{
btnState = new ButtonStateModel()
{
BtnOneImage = "Skins/images/flag/OP.png",
BtnOneVisible = Visibility.Visible,
BtnTwoImage = "Skins/images/flag/OFF.png",
BtnTwoVisible = Visibility.Visible
};
}
else if (flag == 2)
{
btnState = new ButtonStateModel()
{
BtnOneImage = "Skins/images/flag/OFF.png",
BtnOneVisible = Visibility.Visible,
BtnTwoImage = "Skins/images/flag/OR.png",
BtnTwoVisible = Visibility.Visible
};
}
}
});
return btnState;
}
set
{
if (value == _buttonStateModel)
{
return;
}
_buttonStateModel = value;
RaisePropertyChanged("ButtonStateModel");
}
}
現在的問題是,每當我加載Silverlight應用程序,在用戶界面上的按鈕無法正常載入其狀態。我知道的原因是因爲該GetPR功能與web服務(ASMX),這是非常奇怪的,我不能在Silverlight中生成的客戶端代碼中使用的AutoResetEvent做同步操作:
public void GetPR(string rtuID, string devID, Action<List<BusControlPR>> action)
{
ServiceSoapClient proxy = new ServiceSoapClient();
proxy.GetPRAsync(rtuID, devID);
proxy.GetPRCompleted += (sender, args) =>
{
//I cannt do Sync Operation Here by using AutoResetEvent.
if (action != null)
action(args.Result.ToList());
};
}
我使用web服務(ASMX頁)而不是WCF ria服務。 上面的問題是我遇到的,任何人都可以給我一些亮光?