On Thursday, 8 October 2020 at 17:02:55 UTC, Alaindevos wrote:
One thing I want to do is in an eventhandler of a button
released event which takes minutes in duration to change the
state of the statusbar indicating something is going on.
But the statusbar is not redrawn before the evenhandler
finishes.
Better would be to start a new thread but D-spwawn-threads can
not call member functions of the MainWindow calls so some
plumbing with gtk is needed. This thread would coexist with the
gtk main eventloop. The GTK docs on this look overwhelmingly
complicated at first.
I am typing on my mobile phone, so cannot give you a whole
example. Just copied and pasted some existing code of mine.
İnherit a Thread class:
module downloadservice;
import core.thread;
import std.stdio;
import appwindow;// your window class
class DownloadService : Thread {
@property bool workingProperty() { return is_working; } // read
property
@property bool workingProperty(bool value) { return
is_working = value; } // write property
AppWindow ctx;// access all members of your appwindow
string itag, path, uuid;
this(AppWindow _ctx, string _itag, string _path, string
_uuid){
ctx = _ctx;
itag = _itag;
path = _path;
uuid = _uuid;
workingProperty = false;
super(&run);
}
private:
bool is_working;
public:
void run(){
if(this.workingProperty == false){
this.workingProperty = true;
this.ctx.yvid.downloadItem(itag, path, uuid);
this.workingProperty = false;
}
}
}
...
// İn your app window class
// You don't have to use a thread pool
pool = new ThreadPool((wkr, ctx){
auto worker = cast(DownloadService)wkr;
worker.run();
}, cast(void*)this, 50, false);