Discusión sobre el artículo "Desarrollando las interfaces gráficas a base de .Net Framework e C# (Parte 2): Elementos gráficos adicionales"

 

Artículo publicado Desarrollando las interfaces gráficas a base de .Net Framework e C# (Parte 2): Elementos gráficos adicionales:

Este artículo es una continuación lógica de la publicación anterior «Desarrollando las interfaces gráficas para los Asesores Expertos e indicadores a base de .Net Framework y C#» y familiariza a los lectores con nuevos elementos gráficos para crear las interfaces gráficas.

Partiendo de la segunda versión, el controlador comenzó a soportar las ventanas de los mensajes MessageBox. Es un elemento estándar para informar al usuario. También permite ofrecer al usuario varias opciones de acción y obtener una respuesta en forma de una opción escogida por él.

Para iniciar la visualización de las ventanas de los mensajes, seleccione la opción 'Buttons and MessageBox' en el parámetro "Windows Form Element Type" al iniciar el EA. Después de iniciar el EA, aparece el formulario que propone seleccionar una de las siguientes opciones:

Fig. 3. Formulario demo que llama a la ventana de mensajes 

Este formulario, como todos los siguientes, es de demostración, por tanto, está dotado con la lógica comercial. Sin embargo, tras la pulsación de cualquier botón, el EA enviará un aviso que solicita la confirmación de las acciones seleccionadas. Por ejemplo, al pulsar el botón SELL, se mostrará la siguiente ventana de los mensajes:


Fig. 4. El EA solicita la confirmación para abrir una nueva posición corta.

Autor: Vasiliy Sokolov

 
Todo está muy bien, el artículo, la GUI y las infinitas posibilidades de C#, pero ¿por qué no hay tablas, Vasily? ¿Hay alguna dificultad con ellos?
 
Реter Konow:
Todo está muy bien, el artículo, la GUI y las infinitas posibilidades de C#, pero ¿por qué no hay tablas, Vasily? ¿Hay alguna dificultad con ellas?

El volumen de material es demasiado grande, y las tablas en C# son un elemento muy complicado. Es como un triple salto. Hay que acelerar implementando elementos básicos y luego probar con una tabla compleja.

 
Vasiliy Sokolov:

La cantidad de material es demasiado grande, y las tablas en C# son un elemento muy complejo. Es como un triple salto. Necesitas acelerar implementando los elementos básicos, y luego dar un salto a una tabla compleja.

De acuerdo.
 
System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.IO.FileNotFoundException: Не удается найти указанный файл. (Exception from HRESULT: 0x80070002)
   at System.Reflection.RuntimeAssembly.nLoadFile(String path, Evidence evidence)
   at System.Reflection.Assembly.LoadFile(String path)
   at MtGuiController.GuiController.GetGuiController(String assembly_path, String form_name)
   at MtGuiController.GuiController.ShowForm(String assembly_path, String form_name)
   --- End of inner exception stack trace ---
   at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor)
   at System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments)
   at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
   at Wrapper.Wrapper.Call(MethodInfo method, Int64 owner, Int64 parameters, Int64 result)
.Net runtime error

Error al lanzar el Asesor Experto desde el artículo.

 
fxsaber:

Error al ejecutar el Asesor Experto del artículo.

Las rutas al archivo del programa son absolutas, por lo que debe cambiarlas por las rutas reales. No es posible hacer catálogos universales como en MT.

 
Vasiliy Sokolov:

Las rutas al archivo de programa son absolutas, por lo que deberá cambiarlas por rutas reales. No es posible hacer catálogos universales como en MT.

string assembly = "c:\\Users\\Bazil\\source\\repos\\DemoForm\\DemoForm\\bin\\Debug\\DemoForm.exe";

No he encontrado este archivo en ninguna parte. Todavía no es posible compilarlo a partir de las fuentes C# proporcionadas.

 
fxsaber:

No he encontrado este archivo en ninguna parte. Todavía no puedo compilarlo a partir de las fuentes C# proporcionadas.

Extraño, supongo que olvidé adjuntarlo al archivo. Lo publicaré en unas horas.

 
Adjunto en el archivo
Archivos adjuntos:
DemoForm.zip  8 kb
 
Vasiliy Sokolov:
Adjunto en el archivo

Gracias, ha funcionado.

// Pongo DemoForm.exe en Bibliotecas
string assembly = TerminalInfoString(TERMINAL_PATH) + "\\MQL5\\Libraries\\DemoForm.exe";


He encontrado un error muy grave de trabajar con C#-windows. Si mueves C#-window continuamente, Terminal desaparece de la pantalla después de unos segundos, y la carga de CPU-core de terminal64.ine excede el 100%. Tengo 8 núcleos, por lo que la carga completa del núcleo en TaskManager en la CPU es del 12-13%. Cuando la ventana C# está en movimiento, es del 19%.


Tengo una tarjeta gráfica integrada en la CPU, sin tarjeta de vídeo. Pensé que el problema estaba en la pantalla. Es por eso que hice una prueba de este tipo asesor

int handle = INVALID_HANDLE;

void OnInit()
{
  if (EventSetTimer(1))
    handle = FileOpen(__FILE__, FILE_WRITE | FILE_TXT);
}

void OnDeinit( const int )
{
  if (handle != INVALID_HANDLE)
    FileClose(handle);
}

void OnTimer()
{
  if (handle != INVALID_HANDLE)
    FileWriteString(handle, (string)TimeCurrent() + "\n");
}

Escribe la hora del Market Watch cada segundo. Esto es lo que grabó al mover la ventana C#.

2019.06.11 16:22:09
2019.06.11 16:22:11
2019.06.11 16:22:11
2019.06.11 16:22:19
2019.06.11 16:22:23
2019.06.11 16:22:24
2019.06.11 16:22:26
2019.06.11 16:22:28
2019.06.11 16:22:31
2019.06.11 16:22:33
2019.06.11 16:22:34
2019.06.11 16:22:36
2019.06.11 16:22:37
2019.06.11 16:22:45
2019.06.11 16:22:45
2019.06.11 16:22:48
2019.06.11 16:22:51
2019.06.11 16:23:07
2019.06.11 16:23:08
2019.06.11 16:23:10

Se puede ver claramente que OnTimer no se ejecutó durante varios segundos. Es decir, al mover la ventana C# se detiene la ejecución de los Asesores Expertos en el Terminal.


Este problema no sólo afecta a la ventana C# de este artículo.

 
Vasiliy Sokolov:

La eliminación manual de GuiControllerElementsDemo a través del menú Terminal provoca unos segundos de congelación.