0

こんにちは、助けてくれてありがとう。WCF サービスを使用して Silverlight アプリケーションを使用しています。データベースからモジュール、サーバー、サーバー グループをそれぞれ取得する GetModuleObjects()、GetServerObjects()、および GetMonitorGroupObjects() という 3 つの操作コントラクトを持つサービス コントラクトがあります。Main の Service Client インスタンスに 3 つのイベントを追加するコードがあります。最初の 2 つのイベントは正しく発生していますが、何らかの理由で 3 番目のイベントのコードに到達していません。これが問題です。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);
            }
        }

    }
}

3 番目のイベントが発生せず、そのコードに到達しない理由がわかりません。助けてください!

4

1 に答える 1

4

WebServiceForServers_GetServerObjectsCompletedで、GetMonitorGroupObjectsCompletedのEventHandlerを登録していますが、GetServerObjectsAsyncメソッドを呼び出しています。

確かに、GetMonitorGroupObjectsAsync(または同様のもの)を呼び出すことを意味します。

于 2012-08-09T20:00:07.000 に答える