Получите результат асинхронного вызова, инициируемого Системой.NET. Делегируйте метод BeginInvoke
result = EndInvoke(asyncResult)
[res0,...,resN] = EndInvoke(res0,...,resN,asyncResult)
получает результат асинхронного вызова, инициируемого result
= EndInvoke(asyncResult
)BeginInvoke
метод.
[
для методов с res0,...,resN
] = EndInvoke(res0,...,resN
,asyncResult
)out
и/или ref
параметры.
|
Система.NET. Объект IAsyncResult возвращен |
|
Для методов с
|
|
Результаты асинхронного вызова. |
|
Для методов с |
Следующие примеры показывают, как вызвать делегатов с различными аргументами ввода и вывода. Каждый пример содержит:
C# делегируют подпись. Для того, чтобы выполнить код MATLAB®, встройте код делегата в блок под названием SignatureExamples
и загрузите его в MATLAB. Для получения информации смотрите, Создают Приложение.NET для MATLAB Examples.
Функция MATLAB в качестве примера, чтобы использовать с делегатом, который должен существовать на вашем пути.
BeginInvoke
и EndInvoke
подписи MATLAB создают. Чтобы отобразить подписи, создайте экземпляр делегата, myDel
, и вызовите methodsview
функция.
Простой пример MATLAB.
В этом примере показано, как использовать делегата, который не имеет никакого возвращаемого значения.
Делегат C#:
public delegate void delint(Int32 arg);
Функция MATLAB, чтобы вызвать:
% Display input argument function dispfnc(A) % A = number ['Input is ' num2str(A)] end
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)
Вызовите 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
В этом примере показано, как использовать делегата с возвращаемым значением. У делегата нет out
или ref
параметры.
Делегат C#:
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
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)
Вызовите 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
, и никакое возвращаемое значение.
Делегат C#:
public delegate void delrefvoid(ref Double refArg);
MATLAB сопоставляет ref
аргумент в качестве обоих аргументов RHS и LHS. Функция MATLAB, чтобы вызвать.
% Increment input argument function res = incfnc(A) % A = number res = A + 1; end
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)
Вызовите 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
, и одно возвращаемое значение.
Делегат C#:
public delegate Single deloutsingle(Single argIn, out Single argOut);
MATLAB сопоставляет out
аргумент как возвращаемое значение для в общей сложности двух возвращаемых значений. Функция MATLAB, чтобы вызвать.
% Double input argument function [res1,res2] = times2fnc(A) res1 = A*2; res2 = res1; end
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)
Вызовите 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
Если делегат содержит out
или ref
параметры, подпись для EndInvoke
метод следует за MATLAB, сопоставляющим правила. Для получения информации смотрите Делегатов.NET С и касательно Аргументов типа.