[英]EventHandler in WCF service with Silverlight: third event in series never being fired
您好,謝謝您的幫助。 我正在使用WCF服務使用Silverlight應用程序。 我有一個包含三個操作合同的服務合同:GetModuleObjects(),GetServerObjects()和GetMonitorGroupObjects(),它們分別從數據庫中檢索模塊,服務器和服務器組。 我有將三個事件添加到Main中的Service Client實例的代碼。 前兩個事件正確觸發,但是由於某種原因,第三個事件中的代碼始終未到達,這是一個問題。 我在Main.xaml.cs中的代碼如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using SilverlightTreeviewTest.ServiceReference1;
using System.Collections.ObjectModel;
namespace SilverlightTreeviewTest
{
public partial class MainPage : UserControl
{
static public ObservableCollection<ModuleObject> TableModuleObjects = new ObservableCollection<ModuleObject>();
static public ObservableCollection<ServerObject> TableServerObjects = new ObservableCollection<ServerObject>();
static public ObservableCollection<ServerGroupOCollection> TableMonitorGroupObjects = new ObservableCollection<ServerGroupOCollection>();
public MainPage()
{
InitializeComponent();
Service1Client MyWebService = new Service1Client();
MyWebService.GetModuleObjectsCompleted += new EventHandler<GetModuleObjectsCompletedEventArgs>(MyWebService_GetModuleObjectsCompleted);
MyWebService.GetModuleObjectsAsync();
}
void MyWebService_GetModuleObjectsCompleted(object sender, GetModuleObjectsCompletedEventArgs e)
{
dataGrid1.ItemsSource = e.Result;
foreach (DataTest_ModuleObject item in e.Result)
{
ModuleObject module = new ModuleObject((string)item.ModuleName,(int)item.ModuleStatus,(int)item.ServerID,(int)item.ID);
TableModuleObjects.Add(module);
}
Service1Client WebServiceForServers = new Service1Client();
WebServiceForServers.GetServerObjectsCompleted += new EventHandler<GetServerObjectsCompletedEventArgs>(WebServiceForServers_GetServerObjectsCompleted);
WebServiceForServers.GetServerObjectsAsync();
}
void WebServiceForServers_GetServerObjectsCompleted(object sender, GetServerObjectsCompletedEventArgs e)
{
//get each server entry from table and create ServerObject for each
//find the modules from the module collection then add server to server collection
foreach (DataTest_ServerObject item in e.Result)
{
ServerObject server = new ServerObject((string)item.ServerName,(int)item.ID,(int)item.Group_Id);
server.FindModules(TableModuleObjects);
TableServerObjects.Add(server);
}
//fire event to retrieve Monitor groups from db and assign servers to them
Service1Client WebServiceForGroups = new Service1Client();
WebServiceForGroups.GetMonitorGroupObjectsCompleted += new EventHandler<GetMonitorGroupObjectsCompletedEventArgs>(WebServiceForGroups_GetMonitorGroupObjectsCompleted);
WebServiceForGroups.GetServerObjectsAsync();
}
void WebServiceForGroups_GetMonitorGroupObjectsCompleted(object sender, GetMonitorGroupObjectsCompletedEventArgs e)
{
//get each MonitorGroup entry from table and create MonitorGroupObject(ServerGroupOCollection) for each
//find associated servers and then add the group to the collection of groups
foreach (DataTest_MonitorGroupObject item in e.Result)
{
ServerGroupOCollection mGroup = new ServerGroupOCollection((string)item.MonitorGroup_Name, (int)item.ID, (int)item.MonitorGroup_Type);
mGroup.FindServers(TableServerObjects);
TableMonitorGroupObjects.Add(mGroup);
}
}
}
}
我不明白為什么第三事件從未被觸發並且其代碼從未到達。 請幫忙!
在WebServiceForServers_GetServerObjectsCompleted中,您正在為GetMonitorGroupObjectsCompleted注冊一個EventHandler,然后調用GetServerObjectsAsync方法。
當然,您的意思是調用GetMonitorGroupObjectsAsync(或類似方法)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.