Я пытаюсь запустить симуляцию банкомата в C # с Windows Forms, которая может иметь более одного экземпляра банкомата, одновременно осуществляющего операции с банковским счетом.
Идея заключается в использовании семафоров / блокировки длязаблокировать критический код, который может привести к условиям гонки.
Мой вопрос такой:
Как я могу одновременно запускать две формы в разных потоках?В частности, как все это сочетается с Application.Run()
, который уже существует?
Вот мой основной класс:
public class Bank
{
private Account[] ac = new Account[3];
private ATM atm;
public Bank()
{
ac[0] = new Account(300, 1111, 111111);
ac[1] = new Account(750, 2222, 222222);
ac[2] = new Account(3000, 3333, 333333);
Application.Run(new ATM(ac));
}
static void Main(string[] args)
{
new Bank();
}
}
...that I want to run two of these forms on separate threads...
public partial class ATM : Form
{
//local reference to the array of accounts
private Account[] ac;
//this is a reference to the account that is being used
private Account activeAccount = null;
private static int stepCount = 0;
private string buffer = "";
// the ATM constructor takes an array of account objects as a reference
public ATM(Account[] ac)
{
InitializeComponent(); //Sets up Form ATM GUI in ATM.Designer.cs
this.ac = ac;
}
...
Я пытался использовать
Thread ATM2 = new Thread(new ThreadStart(/*What goes in here?*/));
Но какой метод я должен добавить в конструктор ThreadStart, поскольку форма ATM управляется событиями, и нет ни одного метода, управляющего ею?
РЕДАКТИРОВАТЬ:
Я пытался заменить Application.Run(new ATM(ac));
с
ATM atm1 = new ATM(ac);
ATM atm2 = new ATM(ac);
Thread ATM2_T = new Thread(new ThreadStart(atm1.Show));
Thread ATM1_T = new Thread(new ThreadStart(atm2.Show));
ATM1_T.Start();
ATM2_T.Start();
в банке конструктора.Ничего не отображается, и программа завершает работу функции Main ().