Получите результат асинхронного вызова, инициируемого Системой.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 С и касательно Аргументов типа.