我现在正在通过使用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服务。 上面的问题是我遇到的,任何人都可以给我一些亮光?