using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Windows.Forms;
using WindowsFormsApplication3.Enums;
using WindowsFormsApplication3.DataStorge;
using WindowsFormsApplication3.Jobs;
using WindowsFormsApplication3.Jobs.Operation_System;
namespace WindowsFormsApplication3.FormPage
{
public partial class OperationSystemForm : BaseWorkerForm
{
protected int finishedChildFormNO;
protected CheckoutStep checkoutStep;
public void StateChangeEvent()
{
// RefreshForm();
}
public bool identityByState(JobStatus jobStatus) {
bool flag = true;
foreach (BaseJob childjob in jobs)
{
if (childjob.Status != jobStatus)
{
flag = false;
break;
}
}
return flag;
}
public OperationSystemForm(CheckoutContext checkoutContext,CheckoutStep checkoutStep):base(checkoutContext,checkoutStep)
{
this.checkoutStep = checkoutStep;
InitializeComponent();
timer.Tick += new EventHandler(timer_Tick);
ResetForm();
}
private void SetFormStatus() {
foreach (BaseJob childj in jobs)
{
switch (childj.Status)
{
case (JobStatus.Error):
this.status = FormStatus.Error;
break;
case (JobStatus.OK):
this.status = identityByState(JobStatus.OK) ? FormStatus.OK : status;
break;
case (JobStatus.Waiting):
this.status = identityByState(JobStatus.Waiting) ? FormStatus.Waiting : status;
break;
default:
break;
}
}
}
public override void Execute(object obj)
{
base.Execute(obj);
ReportFormStatusChanged();
foreach (BaseJob job in jobs)
{
job.JobStateChangeEvent += StateChangeEvent;
ThreadPool.QueueUserWorkItem(new WaitCallback(job.Execute),null);
}
checkoutContext.logData.Start(checkoutStep, "");
}
public override void ResetForm()
{
base.ResetForm();
jobs.Add(new Job1(checkoutContext,checkoutStep));
jobs.Add(new Job2(checkoutContext, checkoutStep));
}
public override void RefreshForm()
{
base.RefreshForm();
SetFormStatus();
if(checkoutContext.messageList!=null)
{
if (listBox.Items.Count != 0)
listBox.Items.Clear();
foreach (string m in checkoutContext.messageList)
listBox.Items.Add(m);
}
}
private void timer_Tick(object sender, EventArgs e){
RefreshForm();
}
}
}