Я нашел несколько вопросов, касающихся моей проблемы, но все же, я не мог передать это самостоятельно, поэтому я попробую попросить здесь. Я вставлю код, поэтому я думаю, что будет легче объяснить.Передача данных между потоками в 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);
}
}
}
- Я хотел бы иметь из-доступ метода StartCalculation, который начался в другом потоке. Я хотел бы получить доступ к этому списку int из Form1 (10 элементов через 10 секунд, 20 элементов через 20 секунд и т. Д.). Это возможно?
- Возможно ли создание списка в Form1(), а затем его изменение в StartCalculation? Спасибо за ответы :)
Edited для 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);
}
}
}
Я делает игру бота. Я хочу, чтобы он читал память игры в другом потоке (меняя список памяти), а затем, используя несколько других методов (в разных потоках), я хотел бы прочитать из этого списка и выполнять игровые действия в зависимости от значений памяти. Он работает (или просто кажется), но если вы скажете, что это может быть опасно, я бы хотел сделать это безопасным.
Надеюсь, я не сделал дурака из себя, вставив его здесь.
Вот книга: [Threading in C#, Joseph Albahari] (http://www.albahari.com/threading/) – Sjoerd
Хорошо, спасибо! Благодаря этой книге она решена сейчас :) – Patryk
* «10 элементов через 10 секунд, 20 элементов через 20 секунд» * - почему эти задержки? Что, если фоновый поток производит элементы с большей скоростью? Или это должно работать как очередь производителей/потребителей, но с порогом мин. 10 предметов? – Groo