Vyjimka neznama chyba – .NET – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Vyjimka neznama chyba – .NET – Fórum – Programujte.comVyjimka neznama chyba – .NET – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
Kvetr
~ Anonymní uživatel
3 příspěvky
24. 9. 2010   #1
-
0
-

Cau mam tady problem v casti polebtn[fir, two].Name = "jan"; kde mi to vyhodi vyjimku tady je preklad "Volající vlákno nemůže přistupovat tohoto objektu, protože jiné vlákno vlastní ji." prosim poradte, ja uz jsem z toho cely zmateny... diky



public partial class MainWindow : Window
{
private int q = 0;
private int w = 0;
private TcpListener list;

private Thread proc;
private string xxx;
public static int a = 10;
public static int b = 10;
private Mybutton button;
public void ukaz()
{
for (int i = 0; i < 10; i++)
{
for (int c = 0; c < 10; c++)
{

button = new Mybutton();
button.Margin = new Thickness(q, w, 0, 0);
button.X = c;
button.Y = i;
polebtn[c, i] = button;
button.Click += new RoutedEventHandler(button_Click);
button.Width = 20;
button.Height = 20;
canvas1.Children.Add(button);
q += 20;
}
q = 0;
w += 20;
}

}

private Mybutton[,] polebtn=new Mybutton[a, b];
public MainWindow()
{
InitializeComponent();
ukaz();




proc = new Thread(new ThreadStart(slys));
proc.Start();


}
public void slys()
{


IPAddress ip = IPAddress.Parse("127.0.0.1");
list = new TcpListener(ip, 2112);
list.Start();
TcpClient klient = list.AcceptTcpClient();


while (true)
{
string[] words;

NetworkStream str = klient.GetStream();
byte[] data = new byte[1024];

str.Read(data, 0, data.Length);
xxx = System.Text.Encoding.ASCII.GetString(data);
words = xxx.Split(",".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);

MessageBox.Show(words[1]);
int fir = Int32.Parse(words[0]);
int two = Int32.Parse(words[1]);

// polebtn[System.Convert.ToInt32(g), System.Convert.ToInt32(f)].BackColor = Color.Black;
polebtn[fir, two].Name = "jan"; // Tady je chyba

// proc.Start();
//list.Stop();
//klient.Close();
//str.Close();

}


}

Nahlásit jako SPAM
IP: 77.48.244.–
Reklama
Reklama
liborb
~ Redaktor
+18
Guru
24. 9. 2010   #2
-
0
-
Nahlásit jako SPAM
IP: 78.80.52.–
Kvetr
~ Anonymní uživatel
3 příspěvky
24. 9. 2010   #3
-
0
-

To liborb : prosimte nemuzes mi to ukazat primo v tom kode, ja sem z toho cely zmateny...diky

Nahlásit jako SPAM
IP: 77.48.244.–
liborb
~ Redaktor
+18
Guru
24. 9. 2010   #4
-
0
-

Tak přímo v tom tvém kódu ti to ukázat nemůžu resp. nechci, protože to by sis na to mohl zvyknout :), ale ukážu ti to na jednoduchém příkladě. Definuješ delegáta a přes něj (zjednodušeně řečeno) bezpečně voláš svojí funkci v hlavním vlákně, ve které může přistupovat k ovládacím prvkům dle libovůle. Ukázka je včetně parametrů, protože ty tě budou asi zajímat ze všeho nejvíc :).

public partial class Form1 : Form

{
public delegate void DelegateSParametry(int cislo, string text);

private DelegateSParametry sParametry;

public Form1()
{
InitializeComponent();

sParametry = new DelegateSParametry(this.FunkceSParametry);
}

public void FunkceSParametry(int cislo, string text)
{
listBox1.Items.Add(cislo.ToString() + ". " + text);
}

private void button1_Click(object sender, EventArgs e)
{
Thread vlakno = new Thread(new ThreadStart(funkceVlakna));
vlakno.Start();
}

private void funkceVlakna()
{
for (int i = 1; i <= 10; i++)
{
this.Invoke(this.sParametry, new Object[] { i , "ahoj" });

Thread.Sleep(300);
}
}
}


BTW na formuláři je jenom ListBox (listBox1) a tlačítko (button1).

Nahlásit jako SPAM
IP: 78.80.52.–
Kvetr
~ Anonymní uživatel
3 příspěvky
24. 9. 2010   #5
-
0
-

To liborb : diky moc bylo to mysleno nejak tatkto (uz to funguje)



public partial class MainWindow : Window
{
private int q = 0;
private int w = 0;
private TcpListener list;
public delegate void Delegat(int n, int m);
private Delegat deleg;
private Thread proc;
private string xxx;
public static int a = 10;
public static int b = 10;
private Mybutton button;
public void ukaz()
{
for (int i = 0; i < 10; i++)
{
for (int c = 0; c < 10; c++)
{

button = new Mybutton();
button.Margin = new Thickness(q, w, 0, 0);
button.X = c;
button.Y = i;
polebtn[c, i] = button;
button.Click += new RoutedEventHandler(button_Click);
button.Width = 20;
button.Height = 20;
canvas1.Children.Add(button);
q += 20;
}
q = 0;
w += 20;
}

}

private Mybutton[,] polebtn=new Mybutton[a, b];
public MainWindow()
{
InitializeComponent();
ukaz();
deleg = new Delegat(dej);


proc = new Thread(new ThreadStart(slys));

proc.Start();
}
public void slys()
{


IPAddress ip = IPAddress.Parse("127.0.0.1");
list = new TcpListener(ip, 2112);
list.Start();
TcpClient klient = list.AcceptTcpClient();


while (true)
{
string[] words;

NetworkStream str = klient.GetStream();
byte[] data = new byte[1024];

str.Read(data, 0, data.Length);
xxx = System.Text.Encoding.ASCII.GetString(data);
words = xxx.Split(",".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);

MessageBox.Show(words[1]);
int fir = Int32.Parse(words[0]);
int two = Int32.Parse(words[1]);
this.Dispatcher.Invoke(deleg, new object[]{fir,two});
// polebtn[System.Convert.ToInt32(g), System.Convert.ToInt32(f)].BackColor = Color.Black;
//polebtn[fir, two].Name = "jan";

// proc.Start();
//list.Stop();
//klient.Close();
//str.Close();

}


}
public void dej(int n, int m)
{
polebtn[n, m].Background = Brushes.Black;
}

Nahlásit jako SPAM
IP: 77.48.244.–
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, 141 hostů

Podobná vlákna

Neznama — založil Grungy

Neznámá funkce: imap_open() — založil Marek Štafl

Neznámá definice funkce — založil DooFy93

 

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