On Friday, 8 July 2022 at 08:04:45 UTC, Bagomot wrote:
On Thursday, 7 July 2022 at 18:26:15 UTC, Ali Çehreli wrote:

Summing up your help and GrimMaple, I understood how to make the file download progress bar beautifully. Thank you!

I only have a question with how I can work with the GUI from other threads. For example, in my application I have a button (GUI) that starts a long running job. As I understand it, it should run it in a separate thread so as not to block the GUI.

I did it through Thread, but now I realized that there are more convenient ways through Task.

But I do not understand how I can manage the GUI from that separate task. For example, I start the task with the button and block the button press (without blocking the entire GUI), it does its job and unblocks the button.

This is where help is needed. How is it fundamentally correct to do this in D, and how to do it in general with dlangui?

Let's even look at the example of downloading a file.

Here in my application I have a button and its click event. I can set it to work on click. But I do not know how to do it so that the GUI does not block for the duration of the work. I do as in Ali's example, but the GUI is still blocked:
```d
auto btn = new Button("Run"d);
btn.click = delegate(Widget src) {
    auto request = Request("dlang.org");
    auto downloadTask = task!download(&request);
    downloadTask.executeInNewThread;
    return true;
};
```
How to do it right? Not only for downloading, but for any background work in dlangui? Maybe someone knows?

Reply via email to