Force Display Update with Blocking Functions


Manually Force the Display Update

What MCU/Processor/Board and compiler are you using?

ESP32 ILI9341 with SPI Interface

What LVGL version are you using?


What do you want to achieve?

Some part of my software is blocking in nature, it takes a lot of time actually to execute, let’s say 5 seconds.
My understanding unless lv_task_handler(); function is called display will not be updated.
My situation is, the microcontroller starts, and it processes something which takes around 5 seconds, and before calling this blocking function I want to display a wait message using a message box so that the user is aware that something is happening.

What have you tried so far?

I tried calling the function lv_refr_now(NULL); but this doesn’t work, and similarly, I tried calling the function lv_task_handler directly.
I know I am doing something wrong, and there must be something available for this, which I couldn’t find.

Code to reproduce

I think the whole code is not needed, but I will share some important parts with comments.
The following function is called when someone presses the “Re-Scan” button.

void ReScanWiFiSSID(lv_event_t * e)
  static lv_obj_t *msg_box;
  // a message box object is created, which is used to display a message to the user
  // that some processing is happening in the background and one should wait
  msg_box = lv_msgbox_create( NULL, "Re-Scanning", \
                              "Please Wait, getting WiFi SSID", \
                              NULL, false );
  // I added these to function, I thought this forced the display update, but this is not the case
  // lv_task_handler();
  // these two functions are functions which take around 5 seconds of time
  // and once this function execution is completed, the msg box is closed
  lv_msgbox_close( msg_box );

But I can’t see the msg box, and the reason is clear to me, I created the msg box, closes the msg box and then LVGL works and for it, and nothing changed.
If I comment the line lv_msgbox_close( msg_box ); then I can see the message box after 5 seconds, but this is not what I wanted.

Screenshot and/or video

Let me know if some more information is needed.

Any suggestions? Please