c# - Background Worker loading screen in Winforms -
i have form 1 can sign in , take while till data gets loaded form. wanted create seperate form (loadscreen.cs) progress bar when form loading. tried in loadscreen.cs form:
private void form1_load(object sender, eventargs e) { worker = new backgroundworker(); worker.workerreportsprogress = true; worker.workersupportscancellation = true; worker.dowork += new doworkeventhandler(worker_dowork); worker.progresschanged += new progresschangedeventhandler(worker_progresschanged); worker.runworkercompleted += new runworkercompletedeventhandler(worker_runworkercompleted); } void worker_dowork(object sender, doworkeventargs e) { int percentfinished = (int)e.argument; while (!worker.cancellationpending && percentfinished < 100) { percentfinished++; worker.reportprogress(percentfinished); system.threading.thread.sleep(50); } e.result = percentfinished; } void worker_progresschanged(object sender, progresschangedeventargs e) { progressbar1.value = e.progresspercentage; } void worker_runworkercompleted(object sender, runworkercompletedeventargs e) { this.close(); }
i've read worker_dowork method should have code takes longer load. don't know how handle since button in form1. when it's clicked go class with
private void signin_click(object sender, eventargs e) { var login = new login(this); login.checkuserinput(this); }
and there execute operations load things. how connect everything? need help!
i'm in process of creating general-purpose dialogue sort of thing. it's not going ready in time of use suggest go along similar lines. create "loading" dialogue accepts delegate , invokes in dowork
event handler. main form can contain method work , can pass delegate method dialogue. i'll post basic example.
public partial class form1 : form { public form1() { initializecomponent(); } private datatable table; private void button1_click(object sender, eventargs e) { var work = new action(getdata); using (var f2 = new form2(work)) { f2.showdialog(); this.datagridview1.datasource = this.table; } } private void getdata() { this.table = new datatable(); using (var adapter = new sqldataadapter("select * mytable", "connectionstring here")) { adapter.fill(table); } } } public partial class form2 : form { private action work; public form2(action work) { initializecomponent(); this.work = work; } private void form2_load(object sender, eventargs e) { this.backgroundworker1.runworkerasync(); } private void backgroundworker1_dowork(object sender, doworkeventargs e) { this.work(); } private void backgroundworker1_runworkercompleted(object sender, runworkercompletedeventargs e) { this.dialogresult = dialogresult.ok; } }
note there's no real way measure progress when using data adapter display marquee progress bar in case.
Comments
Post a Comment