如何访问.net c#对象中到达的委托函数

本文关键字:函数 对象 何访问 访问 net | 更新日期: 2023-09-27 18:14:10

我正在本地移动设备上运行远程同步例程。它将在自己的线程中运行,因此可以花我们想要的时间。我想使用等待模式,但我不确定如何做到这一点,因为我的远程访问使用委托函数。对不起,我是c#的新手,所以这可能是一个简单的问题。

在我的场景中,我有以下代码:

       public  static void testREADLiveConnection()
    {
        Uri tmaLiveDataRoot = new Uri("https://xxx.azurewebsites.net/xxx.svc/");
        TMLiveData.TMALiveData mLiveData = new TMLiveData.TMALiveData(tmaLiveDataRoot);
        mResult = null;

        DataServiceQuery<TMLiveData.JobType> query = (DataServiceQuery<TMLiveData.JobType>)mLiveData.JobTypes.Where(c => c.IsActive == true);
        mLiveData.Credentials = new System.Net.NetworkCredential("xx", "yy");
        mResult = "Trying to READ the data";
        try
        {
            query.BeginExecute(OnQueryComplete, query);
        }
        catch (Exception ex)
        {
            mResult = "Error on beginExecute: " + ex.Message;
        }

    }
    private static  void OnQueryComplete(IAsyncResult result)
    {
        DataServiceQuery<TMLiveData.JobType> query = (DataServiceQuery<TMLiveData.JobType>) result.AsyncState; 
        mResult = "Done!";
        try
        {
            foreach (TMLiveData.JobType jobType in query.EndExecute(result))
            {
                mResult += jobType.JobType1 + ",";
            }
        }catch (DataServiceClientException  ex)
        {
            mResult = "Error looping for items: (DataServiceClientException)" + ex.Message;
        }
        catch (DataServiceQueryException  ex2)
        {
            mResult = "Error looping for items: (DataServiceQueryException)" ;
        }
        catch (Exception ex3)
        {
            mResult = "Error looping for items: (general exception)" + ex3.Message;
        }
    }

关键是我在类中运行一个方法,它有一个委托函数,当响应来的时候调用。

问题:我如何从另一个类中使用这个类,以便我等待响应并接收它。

ie。我希望

testLSCon newRemoteObject;
listOfJobTypes = await newRemoteObject.testREADLiveConnection();

然后用listOfJobTypes做我想做的。

谢谢

如何访问.net c#对象中到达的委托函数

我在另一个问题上找到了答案,而且效果很好。

答案在这里

第一个方法的Try{}块中的新代码变成:

       try
        {
            //method 2 doing inline
            TaskFactory<IEnumerable<TMLiveData.JobType>> tf = new TaskFactory<IEnumerable<TMLiveData.JobType>>();
            IEnumerable < TMLiveData.JobType > jobTypes = await tf.FromAsync(query.BeginExecute(null, null),
                                       iar => query.EndExecute(iar));
            foreach (TMLiveData.JobType jobType in jobTypes )
            {
                mResult += jobType.JobType1 + ",";
            }

            //method 1 using the onQueryComplete delegate function
            //query.BeginExecute(OnQueryComplete, query);
        }