dodání ihned! nové
Pouze tento týden sleva až 80 % na e-learning týkající se PHP. Zároveň využij akce až 30 % zdarma při nákupu e-learningu. Více informací.
Hledáme programátora do rostoucího týmu ITnetwork.cz, 100% home office, 100% flexibilní pracovní doba. Více informací
PHP week

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

Aktivity
Avatar
jackxl
Člen
Avatar
jackxl:18.9.2015 13:48

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:18.9.2015 15:07

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
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
jackxl
Člen
Avatar
jackxl:21.9.2015 14:24

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.