EndInvoke

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

    Описание

    пример

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

    пример

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

    Примеры

    свернуть все

    The 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

    The 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

    The 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.

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

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

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

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

    свернуть все

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

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

    Введенный в R2011a