Jees, eli minulla on konsolisovellus, jossa luon formin toiseen threadiin. Formista pystyn kutsumaan konsolin funktioita, mutta konsolista käsin en voi esimerkiksi muuttaa tekstilootan sisältöä.
Formi on luotu valmiiksi ja löytyy projektista muine objekteineen.
atm formin näyttämiseen käytän koodia:
namespace ConsoleApplication1 { class Program { public static Form1 formi = new Form1(); public static void Main(string[] args) { Program t = new Program(); t.test(); } public void test() { Thread t = new Thread(new ThreadStart(StartNewStaThrea)); t.Start(); } private void StartNewStaThrea() { Application.Run(formi); } } }
Esim objektia kutsuttaessa:
formi.TextBox1.Text = "tere";
aiheutuu virheilmoitus:
Ristisäietoiminto ei ole kelvollinen: Ohjausobjektia TextBox1 käytettiin jostakin muusta säikeestä kuin siitä, jossa se luotiin.
Mistään en oikeen googlella löytänyt apuja.
Tarkoituksena siis: Avata Form1 jossa tekstiloota, kirjoittaa tietoa tekstilootaan konsolista.
Mod. korjasi oikeat kooditagit!
Jos jostain threadista koittaa muokta formin elementtejä, niin pitää käyttää tuommosta Delegatea. Tuossa alempana yksi tapa, tuohon kyllä löytyy muitakin tapoja.
Invoke(new MethodInvoker( delegate { txtEsimerkki.Text ="Jotain tekstiä"; } ));
En ole kyllä varma toimiiko justiinsa samaan tapaan konsoli sovelluksella, mutta kaippa kuhan laittaa formin nimen eteen.
Kiitos Synomi. Oli aikamoisen tappelun takana
Tälläsellä koodilla lähti toimimaan.
formi.tekstiloota.Invoke(new MethodInvoker(delegate { formi.tekstiloota.Text = "Terve"; }));
Aihe on jo aika vanha, joten et voi enää vastata siihen.