EndInvoke

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

Синтаксис

закончитесь = EndInvoke (asyncResult)
[res0..., resN] = EndInvoke (res0..., resN, asyncResult)

Описание

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

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

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

asyncResult

Система.NET. Объект IAsyncResult возвращен BeginInvoke.

res0,...,resN

Для методов с out и/или параметрами ref, результатами асинхронного вызова. Количество аргументов является суммой:

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

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

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

результат

Результаты асинхронного вызова.

res0,...,resN

Для методов с out и/или параметрами ref, результатами асинхронного вызова,

Примеры

Следующие примеры показывают, как вызвать делегатов с различными аргументами ввода и вывода. Каждый пример содержит:

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

  2. Функция MATLAB в качестве примера, чтобы использовать с делегатом, который должен существовать на вашем пути.

  3. Подписи BeginInvoke и EndInvoke MATLAB создают. Чтобы отобразить подписи, создайте экземпляр делегата, myDel, и вызовите функцию methodsview.

  4. Простой пример MATLAB.

Этот пример показывает, как использовать делегата, который не имеет никакого возвращаемого значения.

  1. Делегат C#:

    public delegate void delint(Int32 arg);
  2. Функция MATLAB, чтобы вызвать:

    % Display input argument
    function dispfnc(A)
    % A = number
    ['Input is ' num2str(A)]
    end
    
  3. MATLAB создает следующие подписи. Для BeginInvoke:

    System.IAsyncResult RetVal	
        BeginInvoke	(
            SignatureExamples.delint this, 
            int32 scalar arg, 
            System.AsyncCallback callback, 
            System.Object object)

    Подпись EndInvoke:

        EndInvoke	(
            SignatureExamples.delint this, 
            System.IAsyncResult result)
    
  4. Вызов dispfnc:

    myDel = SignatureExamples.delint(@dispfnc);
    asyncRes = myDel.BeginInvoke(6, [], []);
    while asyncRes.IsCompleted ~= true
        pause(0.05) % Use pause() to let MATLAB process event
    end
    myDel.EndInvoke(asyncRes)
    
    Input is 6

Этот пример показывает, как использовать делегата с возвращаемым значением. У делегата нет параметров ref или out.

  1. Делегат C#:

    public delegate Int32 del2int(Int32 arg1, Int32 arg2);
    
  2. Функция MATLAB, чтобы вызвать:

    % Add input arguments
    function res = addfnc(A, B)
    % A and B are numbers
    res = A + B;
    end
    
  3. MATLAB создает следующие подписи. Для BeginInvoke:

    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)
    
  4. Вызовите addfnc.

    myDel = SignatureExamples.del2int(@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

Этот пример показывает, как использовать делегата с параметром ref, refArg и никаким возвращаемым значением.

  1. Делегат C#:

    public delegate void delrefvoid(ref Double refArg);
    
  2. MATLAB сопоставляет аргумент ref в качестве обоих аргументов RHS и LHS. Функция MATLAB, чтобы вызвать.

    % Increment input argument
    function res = incfnc(A)
    % A = number
    res = A + 1;
    end
  3. MATLAB создает следующие подписи. Для BeginInvoke:

    [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)
    
  4. Вызовите incfnc.

    x = 6;
    myDel = SignatureExamples.delrefvoid(@incfnc);
    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

Этот пример показывает, как использовать делегата с параметром out, argOut и одним возвращаемым значением.

  1. Делегат C#:

    public delegate Single deloutsingle(Single argIn, out Single argOut);
    
  2. MATLAB сопоставляет аргумент out как возвращаемое значение для в общей сложности двух возвращаемых значений. Функция MATLAB, чтобы вызвать.

    % Double input argument
    function [res1,res2] = times2fnc(A)
    res1 = A*2;
    res2 = res1;
    end
  3. MATLAB создает следующие подписи. Для BeginInvoke.

    [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)
    
  4. Вызовите times2fnc.

    myDel = SignatureExamples.deloutsingle(@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

Советы

Введенный в R2011a

Была ли эта тема полезной?