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

Popular posts from this blog

node.js - Mongoose: Cast to ObjectId failed for value on newly created object after setting the value -

[C++][SFML 2.2] Strange Performance Issues - Moving Mouse Lowers CPU Usage -

ios - Possible to get UIButton sizeThatFits to work? -