【发布时间】:2014-12-29 15:47:22
【问题描述】:
我现在正在进行一个关于使用 Silverlight 和 Web 服务(asmx 页面)控制设备的项目。项目流程如下:
按下silverlight UI上的按钮,它会通过socket发送一个包到中间线。然后 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 应用程序时,UI 上的按钮都无法正确加载其状态。我知道原因是因为GetPR函数来自webservice(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 服务。 以上问题是我遇到的问题,谁能给我一些启发?
【问题讨论】:
标签: web-services silverlight sync