exponenta event banner

EndInvoke

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

    Описание

    пример

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

    пример

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

    Примеры

    свернуть все

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

    Построить этот код делегата C # в сборке с именемSignatureExamples и загрузите его в MATLAB ®. Дополнительные сведения см. в разделе Создание приложения .NET для примеров MATLAB.

    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.

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

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

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

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

    свернуть все

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

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

    Представлен в R2011a