Main Content

Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

Llamar a métodos .NET asincrónicamente

¿Cómo maneja las llamadas de método asincrónico en .NETMATLAB

Es posible llamar a un método sincrónico de forma asincrónica en.MATLAB® Con algunas modificaciones, puede utilizar los métodos y.Microsoft®BeginInvokeEndInvoke Para obtener más información, consulte el artículo.MSDN®Llamar a métodos sincrónicos asincrónicamente

Puede usar delegados para llamar a un método sincrónico de forma asincrónica mediante el uso de la y métodos.BeginInvokeEndInvoke Si el subproceso que inicia la llamada asincrónica no necesita ser el subproceso que procesa los resultados, puede ejecutar un método de devolución de llamada cuando finalice la llamada. Para obtener información sobre el uso de un método de devolución de llamada, consulte.Llamar a un método asincrónicamente mediante una devolución de llamada cuando finaliza una llamadas asincrónica

Nota

es una aplicación de un solo subproceso.MATLAB Por lo tanto, el control de llamadas asincrónicas en el entorno puede provocar interbloqueos.MATLAB

Llamar a un método asincrónicamente mediante una devolución de llamada cuando finaliza una llamadas asincrónica

Puede ejecutar un método de devolución de llamada cuando finaliza una llamada asincrónica. Un método de devolución de llamada se ejecuta en un subproceso diferente que el subproceso que procesa los resultados de la llamada asincrónica.

A continuación se muestra un resumen del procedimiento. Si no utiliza una función de devolución de llamada, siga el procedimiento.Llamar a un método de forma asincrónica sin una devolución de llamada

  • Seleccione o cree una función para ejecutarla asincrónicamente.MATLAB

  • Seleccione o cree un delegado de C# y asócielo a la función.MATLAB

  • Cree una función de devolución de llamada con una firma.MATLABDelegado System. AsyncCallback La firma, mostrada en el sitio web, es:MSDN

    public delegate void AsyncCallback(IAsyncResult ar) 
  1. Mediante el código, inicie la llamada asincrónica mediante el método, especificando el delegado de devolución de llamada y, si es necesario, parámetros de objeto.MATLABBeginInvoke

  2. Continuar ejecutando comandos en.MATLAB

  3. Cuando finaliza la función asincrónica, llama a la función de devolución de llamada, que ejecuta el método para recuperar los resultados.MATLABEndInvoke

Ejemplo de devolución de llamada

En este ejemplo, cree la siguiente función para ejecutarse asincrónicamente:MATLAB

function X = DivideFunction(A, B) if B ~= 0     X = A / B; else     errid = 'MyID:DivideFunction:DivisionByZero';     error(errid, 'Division by 0 not allowed.') end end 

Cree la siguiente función, que se ejecuta como devolución de llamada cuando finaliza la invocación del método asincrónico.MATLAB Esta función muestra el valor del método.resultEndInvoke

function myCallback(asyncRes) result = asyncRes.AsyncDelegate.EndInvoke(asyncRes); disp(result) end

Utilice el delegado, definido en el ensamblaje:del2IntegerNetDocDelegate

public delegate Int32 del2Integer(Int32 arg1, Int32 arg2);

Ejecute el ejemplo:

% Create the delegate divDel = NetDocDelegate.del2Integer(@DivideFunction); A = 10; B = 5; % Initiate the asynchronous call. asyncRes = divDel.BeginInvoke(A,B,@myCallback,[]); 

muestra el resultado:MATLAB2

Llamar a un método de forma asincrónica sin una devolución de llamada

A continuación se muestra un resumen del procedimiento. Si desea utilizar una función de devolución de llamada, siga el procedimiento.Llamar a un método asincrónicamente mediante una devolución de llamada cuando finaliza una llamadas asincrónica

  • Seleccione o cree una función para ejecutarla asincrónicamente.MATLAB

  • Seleccione o cree un delegado de C# y asócielo a la función.MATLAB

  1. En, inicie la llamada asincrónica mediante el método.MATLABBeginInvoke

  2. Continuar ejecutando comandos en.MATLAB

  3. Sondeo para la finalización de llamadas asincrónicas mediante la función.MATLABpause

  4. Cuando finalice la función asincrónica, llame al método para recuperar los resultados.EndInvoke

Ejemplo sin devolución de llamada

En este ejemplo, cree la siguiente función:MATLABmyFunction

% MATLAB function to execute asynchrounously function res = myFunction(strValue) res = strValue; end 

Utilice el delegado, definido en el ensamblaje:delStringNetDocDelegate

public delegate string delString(string message);

En, cree el delegado, defina los valores de entrada e inicie la llamada asincrónica:MATLABmyDelegate

myDelegate = NetDocDelegate.delString(@myFunction); A = 'Hello'; asyncRes = myDelegate.BeginInvoke(A,[],[]); 

El método devuelve el objeto, que se usa para supervisar el progreso de la llamada asincrónica.BeginInvokeasyncRes Sondear los resultados, usando la función para dejar procesar los eventos:MATLABpauseMATLAB

while asyncRes.IsCompleted ~= true     pause(0.01) end 

Recupere y visualice los resultados de la llamada asincrónica:

result = myDelegate.EndInvoke(asyncRes); disp(result) 
Hello 

Usar argumentos con y tipoEndInvokeoutref

La firma del delegado sigue las reglas de asignación especiales si el delegado tiene o escribe argumentos.MATLABEndInvokeoutref Para obtener información sobre la asignación, consulte.Los delegados de .NET con y argumentos de tipooutref Para ver ejemplos, consulte la página de referencia.EndInvoke

Uso de sondeo para detectar cuando finaliza la llamada asincrónica

Para procesar el evento que ejecuta la devolución de llamada del delegado en el subproceso principal, llame a la función (o una similar).MATLABMATLABpause

Consulte también

|

Sitios web externos