Diskuze: Problém s vyjímko - Cannot access a disposed object

C# .NET .NET (C# a Visual Basic) Problém s vyjímko - Cannot access a disposed object American English version English version

Avatar
jackxl
Člen
Avatar
jackxl:

Zdar.
Tuto chybu už jsem hledal na Googlu, ale nic neodpovídá mému problému.

Vytvořil jsem si singleton s názvem DataFormulare, který dědí od interfacu INotifyProper­tyChanged.
V něm jsem vytvořil vlastnost nazvanou ControlInvoke typu Control.
a vlastnost ZmerenaDavka, která vyvolá událost, když se hodnota nastaví.
V konstruktoru Form1 jsem přiřadil a inicializoval DataBinding na textBox

DataFormulare.Instance.ControlInvoke = this;
txtZmerDavka.DataBindings.Add(new Binding("Text", DataFormulare.Instance, "ZmerenaDavka"));

Potom spouštím vlákno s nejvyšší prioritou a v něm je toto krom dalšího kódu samozřejmě:

DataFormulare.Instance.ControlInvoke.Invoke(new ThreadStart(delegate()
                            {
                                DataFormulare.Instance.ZmerenaDavka =   NC.prepocetNaDavku(DataFormulare.Instance.ZmerenaDavkaOkamzita1,
                                    ObecneMapovani.RozliseniOdmVsrku, ObecneMapovani.PlochaOdmVrsku)
                            }));

Problém je v tom, že po nějaké náhodné době mi vyskočí vyjímka "Cannot access a disposed object. Object name: Form1". Nevíte čím to může být ?

Běží mi vlákno ve kterém měřím hodnoty a pak změřené hodnoty zobrazuji na formuláři.
Vlákno běží nepřetržitě po celou dobu programu a hodnoty potřebuji i v jiných třídách.

Odpovědět 18.9.2015 13:48
Žádná hranice není nepřekonatelná.
Avatar
Odpovídá na jackxl
sadlomaslox25:

1. tohle
DataFormulare­.Instance.Con­trolInvoke = this;
bych nedelal v konstruktoru ale na udalost FormLoad protoze Invoke nema moc rad neinicializovany formular aspon co si pamatuju.

2. kolik mas formularu v aplikaci? je form1 jediny formular v aplikaci ? skryvas nekdy ten formular? ta chyba rika ze volas metodu Invoke nad instanci tridy Form1 ale tato instance uz neexistuje.

 
Nahoru Odpovědět 18.9.2015 15:07
Avatar
jackxl
Člen
Avatar
jackxl:

ad 1) Zkusím přehodit
ad 2) Mám 9 formulářů.
Form1 je ale jediný, který je stále aktivní a v něm jsou záložky.

Nahoru Odpovědět 21.9.2015 14:24
Žádná hranice není nepřekonatelná.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 3 zpráv z 3.