» Poradna » Programy

Visual Studio 2013 (C#) - nově vytvořené vlákno nemění text labelu

 |   |  Microsoft Windows 8.1 Chrome 32.0.1700.72

Zdravím Vás,potřeboval bych poradit s jednoduchým kódem, který jsem vytvořil ve Visual Studiu 2013 (C#). Jedná se o okenní aplikaci. Na stisk tlačítka se mi vytvoří nové vlákno, které mi vyhodí hlášku o tom, že vlákno běží a dále mi má změnit text v LABELu, což nefunguje. Nevíte proč?using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;using System.Threading;namespace WindowsFormsApplication1{ public partial class Form1 : Form { Thread thread1; static bool status = false; public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { if (status) { status = false; thread1.Abort(); } else { status = true; thread1 = new Thread(test); thread1.Start(); } } static private void test() { MessageBox.Show("THREAD1 - running"); label1.Text = "test"; while (true) ; } }}

Mohlo by vás také zajímat

Odpovědi na otázku

 | Microsoft Windows 8.1 Chrome 32.0.1700.72

Ze statické metody nemůžeš přistupovat k instančním vlastnostem. I kdyby nebyla statická, z jiného vlákna to tak snadno nezměníš.http://stackoverflow.com/questions/142003/cross-th...

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Linux Chrome 32.0.1700.77

V C# som v zivote nerobil. Ale nemoze zadefinovat do noveho vlakna metodu daneho classu? Prip. neexistuje tam nieco ako interface Runnable v jave? Ak nie tak predpokladam ze v C# ide ulozit dany form-class ako staticku premennu a potom sa dostanes aj k instancnym premennym. Ale toto riesenie by bolo podla mna neprijatelne a vobec by sa nedrzalo zasad OOP.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 | Microsoft Windows 8.1 Chrome 32.0.1700.72

Nemůže, přístup z jiného vlákna je popsán v odkazu, který jsem tam napsal.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 | Microsoft Windows 8.1 Firefox 26.0

Pokud se ucis C# zapomen na Windows Forms a rovnou se uc WPF. Windows Forms je mrtve. Je potreba jen kvuli zpetne kompatibilite s jiz existujicima aplikacema.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 7 Chrome 32.0.1700.76

Jaký je rozdíl mezi Windows Form a WPF? Vzhledem k tomu, že se C# stále učím, ale jen když potřebuji tak jsem byl v podstatě odkojený na Windows Form (začínal jsem na Delphi).

Souhlasím  |  Nesouhlasím  |  Odpovědět
 | Microsoft Windows 8.1 Firefox 24.0

Zakladni rozdil je ze WinForms je bitmapove zatimco WPF je vektorove. Z toho vypliva ze u WPF neni problem s podporou ruznych DPI. Programovani v tom je velmi odlisne. Proto nema cenu se ucit WinForms.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 | Microsoft Windows 7 IE 11.0

winforms ani zdaleka není mrtvé ... Nicméně, je dobré mít o WPF nějakou povědomost .)

Souhlasím  |  Nesouhlasím  |  Odpovědět
 | Microsoft Windows 8.1 Firefox 24.0

Bohuzel jsou taci co to pouzivaji dal. A pak se nadava na MS ze neni propraveno na moderni technologie. MS je, ale plno firem a programatoru neni - vysledek vetsina aplikaci na 4K LCD je nepouzitelna.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 7 Firefox 26.0

Taky se učím v C# podívej se na http://www.dotnetportal.cz/forum/tema/3309/Vlakna-vy... .

Souhlasím  |  Nesouhlasím  |  Odpovědět
 | Microsoft Windows 7 Opera 9.80

Ve windows Forms v C# není povoleno modifikovat formulářové prvky z jiného vlákna než z toho hlavního ve kterém to běží.Pokud chceš používat vlákna a windows forms, tak doporučuju používat třídu Background worker. Tam může nějaký výpočet běžet v jiném vlákně, a přes eventy progress a completed odesílat zprávy do hlavního vlákna, kde se budou psát nějaké zprávy ve formuláři.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Linux AppleMAC-Safari 5.0

Související témata: Visual Studio, Vlákno, System, Status, Private, Void, Thread, False, Stisk tlačítka, Nové vlákno, Collections, Tasks