我有一个进度条的类,通过子线程启动它;
public partial class BeAppProgressBar : Form
{
public BeAppProgressBar()
{
InitializeComponent();
} private Thread myThread; private void RunsOnWorkerThread()
{
for (int i = 0; i <= 100; i++)
{
for (int j = i; j <= 100; j++)
{
if (j % 10 == 0)
{
ShowProgress(Convert.ToString(j) + "%", j); Thread.Sleep(100);
if (i <= 5)
{
ShowMessage("数据发送...", j);
}
else if (i <= 10 && i > 5)
{
ShowMessage("数据请求...", j);
}
else if (i > 15 && i < 20)
{
ShowMessage("数据响应...", j);
}
else
{
CloseMessage("", j);
if (this.myThread != null)
{
//Thread.CurrentThread.Abort();
Thread.CurrentThread.IsBackground = true;
}
}
}
}
}
} public void ShowProgress(string msg, int percentDone)
{
try
{
if (InvokeRequired)
{
System.EventArgs e = new MyProgressEvents(msg, percentDone);
object[] pList = { this, e };
BeginInvoke(new MyProgressEventsHandler(UpdateUI), pList);
}
else
{
UpdateUI(this, new MyProgressEvents(msg, percentDone));
}
}
catch
{ }
} public void ShowMessage(string msg, int percentDone)
{
try
{
if (InvokeRequired)
{
System.EventArgs e = new MyProgressEvents(msg, percentDone);
object[] pList = { this, e };
BeginInvoke(new MyProgressEventsHandler(UpdateText), pList);
}
else
{
UpdateUI(this, new MyProgressEvents(msg, percentDone));
}
}
catch
{ }
} public void CloseMessage(string msg, int percentDone)
{
try
{
System.EventArgs e = new MyProgressEvents(msg, percentDone);
object[] pList = { this, e };
BeginInvoke(new MyProgressEventsHandler(CloseForm), pList);
}
catch
{ }
} private delegate void MyProgressEventsHandler(object sender, MyProgressEvents e); public void CloseThread()
{
Thread.CurrentThread.Abort();
} private void UpdateText(object sender, MyProgressEvents e)
{
this.labelMessage.Text = e.Msg;
} private void CloseForm(object sender, MyProgressEvents e)
{
this.Close();
} private void UpdateUI(object sender, MyProgressEvents e)
{
this.labelPersent.Text = e.Msg;
this.progressBar1.Value = e.PercentDone; } public class MyProgressEvents : EventArgs
{ public string Msg; public int PercentDone; public MyProgressEvents(string msg, int per)
{ Msg = msg;
PercentDone = per;
}
} private void BeAppProgressBar_Load(object sender, EventArgs e)
{
try
{
myThread = new Thread(new ThreadStart(RunsOnWorkerThread));
myThread.Start();
}
catch
{ }
}
}
这个是进度条的类,通过 Thread progressBarThead = new Thread(new ThreadStart(ShowProgressBar))这个方法启动了这个进度条的类的子线程。
private void ShowProgressBar()
{
BeAppProgressBar pro = new BeAppProgressBar();
pro.ShowDialog();
pro.Dispose();
}然后在主线程,我应该怎么来调用progressBarThead 这个线程里面的ShowProgress()方法? 请高手指点迷津。
public partial class BeAppProgressBar : Form
{
public BeAppProgressBar()
{
InitializeComponent();
} private Thread myThread; private void RunsOnWorkerThread()
{
for (int i = 0; i <= 100; i++)
{
for (int j = i; j <= 100; j++)
{
if (j % 10 == 0)
{
ShowProgress(Convert.ToString(j) + "%", j); Thread.Sleep(100);
if (i <= 5)
{
ShowMessage("数据发送...", j);
}
else if (i <= 10 && i > 5)
{
ShowMessage("数据请求...", j);
}
else if (i > 15 && i < 20)
{
ShowMessage("数据响应...", j);
}
else
{
CloseMessage("", j);
if (this.myThread != null)
{
//Thread.CurrentThread.Abort();
Thread.CurrentThread.IsBackground = true;
}
}
}
}
}
} public void ShowProgress(string msg, int percentDone)
{
try
{
if (InvokeRequired)
{
System.EventArgs e = new MyProgressEvents(msg, percentDone);
object[] pList = { this, e };
BeginInvoke(new MyProgressEventsHandler(UpdateUI), pList);
}
else
{
UpdateUI(this, new MyProgressEvents(msg, percentDone));
}
}
catch
{ }
} public void ShowMessage(string msg, int percentDone)
{
try
{
if (InvokeRequired)
{
System.EventArgs e = new MyProgressEvents(msg, percentDone);
object[] pList = { this, e };
BeginInvoke(new MyProgressEventsHandler(UpdateText), pList);
}
else
{
UpdateUI(this, new MyProgressEvents(msg, percentDone));
}
}
catch
{ }
} public void CloseMessage(string msg, int percentDone)
{
try
{
System.EventArgs e = new MyProgressEvents(msg, percentDone);
object[] pList = { this, e };
BeginInvoke(new MyProgressEventsHandler(CloseForm), pList);
}
catch
{ }
} private delegate void MyProgressEventsHandler(object sender, MyProgressEvents e); public void CloseThread()
{
Thread.CurrentThread.Abort();
} private void UpdateText(object sender, MyProgressEvents e)
{
this.labelMessage.Text = e.Msg;
} private void CloseForm(object sender, MyProgressEvents e)
{
this.Close();
} private void UpdateUI(object sender, MyProgressEvents e)
{
this.labelPersent.Text = e.Msg;
this.progressBar1.Value = e.PercentDone; } public class MyProgressEvents : EventArgs
{ public string Msg; public int PercentDone; public MyProgressEvents(string msg, int per)
{ Msg = msg;
PercentDone = per;
}
} private void BeAppProgressBar_Load(object sender, EventArgs e)
{
try
{
myThread = new Thread(new ThreadStart(RunsOnWorkerThread));
myThread.Start();
}
catch
{ }
}
}
这个是进度条的类,通过 Thread progressBarThead = new Thread(new ThreadStart(ShowProgressBar))这个方法启动了这个进度条的类的子线程。
private void ShowProgressBar()
{
BeAppProgressBar pro = new BeAppProgressBar();
pro.ShowDialog();
pro.Dispose();
}然后在主线程,我应该怎么来调用progressBarThead 这个线程里面的ShowProgress()方法? 请高手指点迷津。
{
Thread progressBarThead = new Thread(ShowProgressBar); public Form1()
{
InitializeComponent();
} private void button1_Click(object sender, EventArgs e)
{
progressBarThead.Start();
} private static void ShowProgressBar()
{
BeAppProgressBar pro = new BeAppProgressBar();
pro.ShowDialog();
pro.Dispose();
}
}