EndInvoke

Получите результат асинхронного вызова, инициируемого методом System.Delegate BeginInvoke.NET

    Описание

    пример

    result = EndInvoke(asyncResult) получает результат асинхронного вызова, инициируемого BeginInvoke метод.

    пример

    [res0,...,resN] = EndInvoke(res0,...,resN,asyncResult) для методов с out и/или ref параметры.

    Примеры

    свернуть все

    del2int делегат возвращает результат двух входных параметров. У делегата нет out или ref параметры.

    Встройте этого делегата C# код в блок под названием SignatureExamples и загрузите его в MATLAB®. Для получения информации смотрите, Создают Приложение.NET для MATLAB Examples.

    public delegate Int32 del2int(Int32 arg1, Int32 arg2);
    

    Создайте эту функцию MATLAB, чтобы добавить два целых числа.

    % Add input arguments
    function res = addfnc(A, B)
    % A and B are numbers
    res = A + B;
    end
    

    Создайте делегата и отобразитесь BeginInvoke подпись.

    myDel = SignatureExamples.del2int(@addfnc);
    methodsview(myDel)
    System.IAsyncResult RetVal	
        BeginInvoke	(
            SignatureExamples.del2int this, 
            int32 scalar arg1, 
            int32 scalar arg2, 
            System.AsyncCallback callback, 
            System.Object object)
    

    Рассмотрите EndInvoke подпись.

    int32 scalar RetVal	
        EndInvoke	(
            SignatureExamples.del2int this, 
            System.IAsyncResult result)
    

    Вызовите addfnc.

    asyncRes = myDel.BeginInvoke(6,8,[],[]);
    while asyncRes.IsCompleted ~= true
        pause(0.05) % Use pause() to let MATLAB process event
    end
    result = myDel.EndInvoke(asyncRes)
    
    result =
              14

    delrefvoid делегат использует ref параметр (refArg). MATLAB сопоставляет ref аргумент в качестве обоих аргументов RHS и LHS.

    Встройте этого делегата C# код в блок под названием SignatureExamples и загрузите его в MATLAB.

    public delegate void delrefvoid(ref Double refArg);
    

    Создайте эту функцию MATLAB, чтобы постепенно увеличить входной параметр и возвратить результат.

    % Increment input argument
    function res = incfnc(A)
    % A = number
    res = A + 1;
    end

    Создайте делегата и отобразитесь BeginInvoke подпись.

    myDel = SignatureExamples.delrefvoid(@incfnc);
    methodsview(myDel)
    [System.IAsyncResult RetVal, 
    double scalar refArg]	
        BeginInvoke	(
            SignatureExamples.delrefvoid this, 
            double scalar refArg, 
            System.AsyncCallback callback, 
            System.Object object)
    

    Рассмотрите EndInvoke подпись.

    double scalar refArg	
        EndInvoke	(
            SignatureExamples.delrefvoid this, 
            double scalar refArg, 
            System.IAsyncResult result)
    

    Вызовите incfnc.

    x = 6;
    asyncRes = myDel.BeginInvoke(x,[],[]);
    while asyncRes.IsCompleted ~= true
        pause(0.05) % Use pause() to let MATLAB process event
    end
    myRef = 0;
    result = myDel.EndInvoke(myRef,asyncRes);
    disp(['Increment of ' num2str(x) ' = ' num2str(result)]);
    
    Increment of 6 = 7

    deloutsingle делегат использует out параметр (argOut) и одно возвращаемое значение. MATLAB сопоставляет out аргумент как дополнительное возвращаемое значение.

    Встройте этого делегата C# код в блок под названием SignatureExamples и загрузите его в MATLAB.

    public delegate Single deloutsingle(Single argIn, out Single argOut);
    

    Создайте эту функцию MATLAB, чтобы удвоить входной параметр.

    % Double input argument
    function [res1,res2] = times2fnc(A)
    res1 = A*2;
    res2 = res1;
    end

    Создайте делегата и отобразитесь BeginInvoke подпись.

    myDel = SignatureExamples.deloutsingle(@times2fnc);
    methodsview(myDel)
    [System.IAsyncResult RetVal, 
    single scalar argOut]	
        BeginInvoke	(
            SignatureExamples.deloutsingle this, 
            single scalar argIn, 
            System.AsyncCallback callback, 
            System.Object object)
    

    Рассмотрите EndInvoke подпись.

    [single scalar RetVal, 
    single scalar argOut]	
        EndInvoke	(
            SignatureExamples.deloutsingle this, 
            System.IAsyncResult result)
    

    Вызовите times2fnc.

    asyncRes = myDel.BeginInvoke(6,[],[]);
    while asyncRes.IsCompleted ~= true
        pause(0.05) % Use pause() to let MATLAB process event
    end
    [a1,a2] = myDel.EndInvoke(asyncRes);
    a1
    
    a1 =
        12

    Входные параметры

    свернуть все

    Объект, возвращенный BeginInvokeВ виде.NET System.IAsyncResult object.

    Результаты 0 через N (если таковые имеются) асинхронного звонка, отвеченного делегатом в виде любого допустимого типа. Для методов с out и/или ref параметры. Количество аргументов является суммой:

    • Количество возвращаемых значений (0 или 1).

    • Количество out и ref аргументы.

    Выходные аргументы

    свернуть все

    Результат асинхронного звонка, отвеченного как любой допустимый тип.

    Результаты 0 через N (если таковые имеются) возвращенный делегатом, возвращенным как любой допустимый тип. Для методов с out и/или ref параметры.

    Введенный в R2011a