Znalazłem kilka pytań dotyczących mojego problemu, ale nadal nie mogłem tego zrobić samodzielnie, więc postaram się zapytać tutaj. Wkleję ten kod, więc myślę, że będzie łatwiej wytłumaczyć.Przekazywanie danych między wątkami w C#
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
Thread thread = new Thread(new ThreadStart(StartCalculation));
thread.Start();
}
private void Form1_Load(object sender, EventArgs e)
{
}
public void StartCalculation()
{
List<int> numbers = new List<int>();
for (int i = 0; i <= 100; i++)
{
numbers.Add(i);
string textForLabel = i.ToString();
label.SafeInvoke(d => d.Text = textForLabel);
}
}
}
- ja jak mieć dostęp ze sposobem StartCalculation który rozpoczął się w inny gwint. Chciałbym uzyskać dostęp do tej listy int z Form1 (10 elementów po 10 sekundach, 20 elementów po 20 sekundach i tak). Czy to jest możliwe?
- Czy tworzenie listy w Form1(), a następnie zmiana w StartCalculation będą możliwe? Dzięki za odpowiedzi :)
Edited dla Groo-/-
public partial class Form1 : Form
{
List<int> list = new List<int>(); // list of int values from game's memory
public Form1()
{
InitializeComponent();
Thread thread = new Thread(new ThreadStart(refreshMemory));
thread.Start();
Thread thread2 = new Thread(new ThreadStart(checkMemory));
thread2.Start();
}
private void Form1_Load(object sender, EventArgs e)
{
}
public void refreshMemory()
{
while (true)
{
// ... refresh game's memory and then, refresh list //
Thread.Sleep(100);
}
}
public void checkMemory()
{
while (true)
{
// eg. if (list[0] == 5) {game:: move_right()}//
Thread.Sleep(100);
}
}
}
Robię gry bot. Chcę, żeby odczytywała pamięć gry w innym wątku (zmieniając listę pamięci), a następnie, przy pomocy kilku innych metod (w różnych wątkach), chciałbym przeczytać z tej listy i wykonać czynności w grze w zależności od wartości pamięci. Działa (lub po prostu wydaje się być), ale jeśli powiesz, że to może być niebezpieczne, chciałbym, aby było to bezpieczne.
Mam nadzieję, że nie zrobiłem z siebie głupka, wklejając go tutaj.
Oto książka: [Threading in C#, Joseph Albahari] (http://www.albahari.com/threading/) – Sjoerd
Cóż, dziękuję! Dzięki tej książce jest już rozwiązany :) – Patryk
* "10 elementów po 10 sekundach, 20 elementów po 20 sekundach" * - dlaczego te opóźnienia? Co się stanie, jeśli wątek tła tworzy elementy szybciej? Czy może to działa jako kolejka producenta/konsumenta, ale z progiem min. 10 przedmiotów? – Groo