c# - ListView problems, Cross class operation -


i'm trying add listviewitem listview on main form (form1), class(comm).

form1:

    public listviewitem lvi_tmp;      private void form1_load(object sender, eventargs e)     {         comm = new comm(this);     }     public void add_to_reg(listviewitem tmp)     {         lvi_tmp = tmp;         this.invoke(new eventhandler(add_to_reg_event));     }      public void add_to_reg_event(object sender, eventargs e)     {         lst_reg.items.add(lvi_tmp);         lst_reg.refresh();         this.refresh();     } 

comm:

    public form1 mainfrm { get; set; }      public comm (form1 _form1)     {         mainfrm = _form1;     }      private void add_item()     {         lvi = new listviewitem("itemtest");         lvi.subitems.add("subitemtest");         lvi.tag = 1;          mainfrm.add_to_reg(lvi);     } 

this code throwing next exception:

"invoke or begininvoke cannot called on control until window handle has been created."

any ideas?

you can check invokerequired before callling begininvoke(). perhaps work you:

public void add_to_reg(listviewitem tmp) {     lvi_tmp = tmp;      if (this.invokerequired))         this.invoke(new eventhandler(add_to_reg_event));     else         add_to_reg_event(null, null); } 

although i'd split add_to_reg_event() , use lambda avoid temporary variable:

public void add_to_reg(listviewitem tmp) {     if (this.invokerequired))         this.invoke(new action(() => add_to_reg_impl(tmp)));     else         add_to_reg_impl(tmp); }  private void add_to_reg_impl(listviewitem item) {     lst_reg.items.add(item);     lst_reg.refresh();     this.refresh(); } 

Comments

Popular posts from this blog

android - Get AccessToken using signpost OAuth without opening a browser (Two legged Oauth) -

org.mockito.exceptions.misusing.InvalidUseOfMatchersException: mockito -

google shop client API returns 400 bad request error while adding an item -