gpt4 book ai didi

c# - 如何使来 self 的 WCF 服务的数据存储在我的 Silverlight 应用程序中?

转载 作者:太空宇宙 更新时间:2023-11-03 14:27:01 25 4
gpt4 key购买 nike

我有一个 Silverlight 应用程序,它通过 WCF 服务从数据库中检索数据。我的应用程序必须做的是在按钮被鼠标悬停时显示所指数据。我这样做的方式是当一个按钮被鼠标悬停时,我调用我的服务并检索数据,但它产生了很大的延迟。现在,我认为另一种方法应该是从表中列出所有对象,并在触发操作时只搜索列表中的 id。我开始编码,但它导致失败(以及如此丑陋的代码)。

我的工作代码

private void MouseOverHarbor(object sender, RoutedEventArgs e)
{
Ellipse thisPath = (Ellipse)sender;
DataRetrieverReference.DataRetrieverClient webService = new DataRetrieverReference.DataRetrieverClient();
webService.GetDataCompleted += new EventHandler<DataRetrieverReference.GetDataCompletedEventArgs>(webService_GetDataCompleted);
webService.GetDataAsync(Convert.ToInt32(thisPath.DataContext));
}

void webService_GetDataCompleted(object sender, WebPortos.DataRetrieverReference.GetDataCompletedEventArgs e)
{
NameField.Text = e.Result.Name;
CityField.Text = e.Result.City;
StateField.Text = e.Result.State;
CompanyField.Text = e.Result.Company;
}

我尝试做什么

private List<vwPortos_SEP> harborList;
private int counter;

public Brasil()
{
InitializeComponent();
this.harborList = new List<vwPortos_SEP>();

DataRetrieverClient webService = new DataRetrieverClient();
webService.GetCounterCompleted += new EventHandler<GetCounterCompletedEventArgs>(webService_GetCounterCompleted);
webService.GetCounterAsync();
webService.GetDataCompleted += new EventHandler<DataRetrieverReference.GetDataCompletedEventArgs>(webService_GetDataCompleted);

for (int i = 0; i < counter; i++)
{
webService.GetDataAsync(i);
}

}

void webService_GetDataCompleted(object sender, WebPortos.DataRetrieverReference.GetDataCompletedEventArgs e)
{
MessageBox.Show("It works!");//It doesn't work!
try
{
this.harborList.Add(e.Result);
}
catch (Exception exc)//It doesn't even throw ecxpetions, this method is never reached.
{
MessageBox.Show(exc.Message);
MessageBox.Show(exc.InnerException.Message);
}
}

也许我遗漏了一些非常重要的东西,但我的 webService_GetDataCompleted 方法从未达到。

先谢谢大家了!

最佳答案

是这个电话吗:

webService.GetCounterAsync();

用来设置计数器

如果是这样,您不会让它在以 counter 作为终止值循环之前完成。 counter 很可能仍为 0,因此您的 GetDataAsync 调用没有发生。

for (int i = 0; i < counter; i++)
{
webService.GetDataAsync(i);
}

将这段代码移到您的 webService_GetCounterCompleted 方法中,这样您的代码就变成了:

public Brasil()
{
InitializeComponent();
this.harborList = new List<vwPortos_SEP>();

DataRetrieverClient webService = new DataRetrieverClient();
webService.GetCounterCompleted +=
new EventHandler<GetCounterCompletedEventArgs>(webService_GetCounterCompleted);
webService.GetCounterAsync();
}

void webService_GetCounterCompleted(object sender,
WebPortos.DataRetrieverReference.GetCounterCompletedEventArgs e)
{
webService.GetDataCompleted +=
new EventHandler<DataRetrieverReference.GetDataCompletedEventArgs>(webService_GetDataCompleted);

for (int i = 0; i < counter; i++)
{
webService.GetDataAsync(i);
}
}

加上您现有的 webService_GetDataCompleted 方法。

关于c# - 如何使来 self 的 WCF 服务的数据存储在我的 Silverlight 应用程序中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3638948/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com