CheckBox change in BackroudWorker – .NET – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

CheckBox change in BackroudWorker – .NET – Fórum – Programujte.comCheckBox change in BackroudWorker – .NET – Fórum – Programujte.com

 

Dejv
~ Anonymní uživatel
27 příspěvků
27. 8. 2013   #1
-
0
-

Zdravim

string name = "checkbox2";
private void main_form_Load(object sender, EventArgs e)
        {
            backgroundWorker1.RunWorkerAsync();
        }
private void backgroundWorker1_DoWork_1(object sender, DoWorkEventArgs e)
        {
	CheckBox checkbox = (CheckBox)this.Controls.Find(name, true)[0];
            checkbox.Checked = true;
}

Potřebuji aby se v Backround workeru zmenil dany checkbox.checked na true.

Nahlásit jako SPAM
IP: 89.102.145.–
Dejv
~ Anonymní uživatel
27 příspěvků
27. 8. 2013   #2
-
0
-

Zapomněl sem dodat že je to v C#

Nahlásit jako SPAM
IP: 89.102.145.–
Evzen+2
Návštěvník
28. 8. 2013   #3
-
0
-

#2 Dejv
Ahoj, 

spíš bys měl dodat, jestli to je WinForm nebo WPF.

Budu mluvit pouze o WPF.

Problém je v tom, že BackgroundWorker běží v jiném vlákně a z cizího vlákna nemůžeš přistupovat na UI.

Vylítne ti to na InvalidOperationException s komentářem:

- The calling thread cannot access this object because a different thread owns it.

Jediné, jak je možné to obejít je využít Dispatchera a použít Invoke.

XAML

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <StackPanel>
            <Label Content="Test" FontWeight="Bold" />
            <CheckBox Name="chckBox" Content="Pokus" />
            <Button Name="btnTest" Content="test" Click="btnTest_Click" />
        </StackPanel>
        
    </Grid>
</Window>

CodeBehind

namespace WpfApplication1
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void btnTest_Click(object sender, RoutedEventArgs e)
        {
            BackgroundWorker worker = new BackgroundWorker();

            worker.DoWork += worker_DoWork;
            worker.RunWorkerAsync(this);
        }

        private void worker_DoWork(object sender, DoWorkEventArgs e)
        {
            Thread.Sleep(2000);
            MainWindow w = (MainWindow)e.Argument;

            // vyhodi vyjimku
            // w.ChangeCheckBox(true);

            // probehne v poradku
            w.Dispatcher.Invoke(
                new Action<bool>(ChangeCheckBox), 
                new object[] { true }
            );
        }

        public void ChangeCheckBox(bool check)
        {
            chckBox.IsChecked = check;
        }
    }
}

Snad ti to pomůže :)

Evžen

Nahlásit jako SPAM
IP: 193.179.183.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 55 hostů

Podobná vlákna

Enum - change value — založil Kenvelo

Checkbox — založil Milan

Checkbox — založil 79kiko

CheckBox — založil Adrian

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý