Nejčastěji odpovídající uživatel
zmena label

Dotaz
-
Ahoj chtěl bych se zeptat. Mám dvě třídy jednu pro seriový_port a druhou vytvořenou WPF (Window1). Ze třídy seriový port potřebuju změnit label1 (název) ale to můžu jenom v Window1. Jinak řečeno potřeboval bych to co mě přijde ze seriového portu hodil přímo do label1, ale vůbec se mě to nedaří propojit (čtení ze ser. port probíhá ve třídě seriový port a label je v Window1, když vytvořím metodu v Window1 public static void NastavLabel).
public static void NastavLabel1(string hodnota) { label1.Content = hodnota; }
tak mi napíše že takto nemůžu použít label1.Content....
Ale když vynechám static tak se zas nedostanu k této metodě ze třídy seriový port....
Nevíte prosím vás někdo jak na to?
Předem moc díky.
Odpovědi
-
Ak sa nemylim, tak mas to v nejakom vlakne (prip. trieda serialport)?
Pozri, tam je aj riesenie, musis to spravit cez Invoke: http://stackoverflow.com/questions/1443944/serialport-reading-cause-error-because-of-not-owning-thread
- Označen jako odpověď KFL-MSMicrosoft employee čtvrtek 28. dubna 2011 14:06
Všechny reakce
-
Zdravim, trieda pre seriovy port je static? Aka je to konkretne? Mohol by si to spravit cez delegate al. event.
Mozes to spravit cez triedu SerialPort, ktora je uz vo frameworku:
http://msdn.microsoft.com/en-us/library/system.io.ports.serialport.aspx
public partial class MainWindow : Window { System.IO.Ports.SerialPort sp = new System.IO.Ports.SerialPort(); public MainWindow() { InitializeComponent(); sp.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(sp_DataReceived); } void sp_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) { //Tu nacitas a vypises prijate nove data } }
-
-
public void _serialPort_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) { string message2 = _serialPort.ReadLine(); label1.Content = message2; }
promin už jsem myslel že to jede, ale když dojde na to že má změnit ten label tak mi napíše: The calling thread cannot access this object because a different thread owns it. a za boha nevim jak s tím pohnout..
proč nemůžu z události změnit label?
-
Ak sa nemylim, tak mas to v nejakom vlakne (prip. trieda serialport)?
Pozri, tam je aj riesenie, musis to spravit cez Invoke: http://stackoverflow.com/questions/1443944/serialport-reading-cause-error-because-of-not-owning-thread
- Označen jako odpověď KFL-MSMicrosoft employee čtvrtek 28. dubna 2011 14:06