dodání ihned! nové
Hledáme programátora do rostoucího týmu ITnetwork.cz, 100% home office, 100% flexibilní pracovní doba. Více informací
Black Friday je tu! Využij jedinečnou příležitost a získej až 80 % znalostí navíc zdarma! Více zde
BF

Diskuze: C# WPF Error - TargetInvocationException

Aktivity
Avatar
krepsy3
Redaktor
Avatar
krepsy3:10.7.2016 11:52

Ahoj, dělám na jedné aplikaci, která mi ale padá s touto chybou, a já nechápu, jak je to možné. Ve formuláři mám jeden Slider (rychlostSlider) a jeden TextBlock (rychlostTextBloc­k), ve kterém chci zobrazovat momentální hodnotu Slideru (1 - 1000). XAML:

<Slider VerticalAlignment="Center" Name="rychlostSlider" Maximum="1000" Minimum="1" SmallChange="1" Value="1" ValueChanged="ZmenaRychlosti" />
<TextBlock Grid.Column="1" Name="rychlostTextBlock" Text="1" />

Když to chci implementovat, použiju tento CodeBehind:

private void ZmenaRychlosti(object sender, RoutedPropertyChangedEventArgs<double> e)
{
      rychlostTextBlock.Text = ((Slider)sender).Value.ToString();
}

Metoda je volána eventem ValueChanged na Slideru. Jakmile dám program zkompilovat, a formulář se Inicializuje, program spadne s touto chybou: TargetInvocati­onException has occured in PresentationFra­mework.dll

Nechápu jak je to možné, ale chybu způsobuje právě ta část "rychlostTextBloc­k.Text = " uvnitř metody ZmenaRychlosti() (Zkusil jsem hodnotu ze Slideru uložit do double a to nedělalo problém. Jakmile jsem chtěl double nastavit jako hodnotu Text TextBlocku, byl zase stejný problém). Zkoušel jsem tedy změnit text tohoto TextBlocku v jiných eventových metodách (Click tlačítka) a nebyl jediný problém. Když jsem přímo ve ZmenaRychlosti() napsal:

rychlostTextBlock.Text = "2";

Opět to řachlo.

Nechápu, co dělám blbě. Poradí mi někdo prosím?

Editováno 10.7.2016 11:54
Odpovědět
10.7.2016 11:52
Programátor je stroj k převodu kávy na kód.
Avatar
VitekST
Člen
Avatar
Odpovídá na krepsy3
VitekST:10.7.2016 12:13

S WPF sice nedělám, ale po troše Googlování jsem přišel k tomuto:

private void ZmenaRychlosti(object sender, RoutedPropertyChangedEventArgs<double> e)
{
        if(rychlostTextBlock == null) return;
        rychlostTextBlock.Text = ((Slider)sender).Value.ToString();
}

Zdroj: http://stackoverflow.com/…selectioncha

Možná je tato metoda volána dřív, než je formulář kompletně inicializovaný, krachne to ihned po startu?

Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
 
Nahoru Odpovědět
10.7.2016 12:13
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
krepsy3
Redaktor
Avatar
Odpovídá na VitekST
krepsy3:10.7.2016 12:34

Jo, to teda jo. Ani nemusím volat Show() (jedná se o obslužný dialog s několika nastaveními). Děkuji za radu!

Editováno 10.7.2016 12:37
Nahoru Odpovědět
10.7.2016 12:34
Programátor je stroj k převodu kávy na kód.
Avatar
VitekST
Člen
Avatar
Odpovídá na krepsy3
VitekST:10.7.2016 12:49

No problem, m8. 8-)

 
Nahoru Odpovědět
10.7.2016 12:49
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 4 zpráv z 4.