110,536
社区成员
发帖
与我相关
我的任务
分享
public partial class Form1 : Form
{
public struct CheckProgress
{//检测进度
public System.Drawing.RectangleF[] DrawRect; // 矩形数组
public System.Drawing.Brush[] DrawBush;// 每个矩形对应的Brush
}
CheckProgress m_DrawCheckProgress;
int CheckProgressLength; //进度条总长度
int m_DrawCounter; //检测进度游标
public Form1()
{
InitializeComponent();
CheckProgressLength = 1000;
m_DrawCounter = 0;
}
Color[] DrawColor = new Color[3] { Color.Red, Color.Green, Color.Yellow };
int rand()
{// 调试用随机数, 用于随机生成大约2%的不合格品
Random r = new Random();
if (r.Next(100) < 97)
{
return 1;
}
else return 0;
}
private void Form1_Load(object sender, EventArgs e)
{
// Initialize Struct CheckProgressBar
m_DrawCheckProgress = new CheckProgress();
m_DrawCheckProgress.DrawRect = new System.Drawing.RectangleF[CheckProgressLength];
m_DrawCheckProgress.DrawBush = new System.Drawing.Brush[CheckProgressLength];
//将Picturebox分割成1000个小矩形
for (int i = 0; i < m_DrawCheckProgress.DrawRect.Length; i++)
{
m_DrawCheckProgress.DrawRect[i] = new RectangleF(PicMainProgress.Width * i * 1.0f / CheckProgressLength, 0, PicMainProgress.Width * 1.0f / CheckProgressLength, PicMainProgress.Height);
m_DrawCheckProgress.DrawBush[i] = new SolidBrush(PicMainProgress.BackColor);
}
//Start Thread
if (false == Bgw_CheckResult.IsBusy)
{
Bgw_CheckResult.RunWorkerAsync();
}
}
//
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
Random random = new Random(); //调试用随机数, 用于随机生成大约2%的不合格品
while (false == Bgw_CheckResult.CancellationPending)
{//调试用
Color c;
int rd = rand();
if (1 == rd)
{
c = Color.Green;
}
else
{
c = Color.Red;
}
m_DrawCheckProgress.DrawBush[m_DrawCounter % CheckProgressLength] = new SolidBrush(c);
// 设置游标颜色(占据2个矩形)
int n = 2;
for (int i = 0; i < n; i++)
{//防止溢出
if (m_DrawCounter % CheckProgressLength + n < CheckProgressLength)
{
m_DrawCheckProgress.DrawBush[m_DrawCounter % CheckProgressLength + (i+1)] = new SolidBrush(Color.Blue);
}
}
//
Bgw_CheckResult.ReportProgress(1);
m_DrawCounter++;
Thread.Sleep(20);
}
}
//
private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
// Refresh Picturebox
PicMainProgress.Refresh();
}
//进度条绘制函数
private void PicMainProgress_Paint(object sender, PaintEventArgs e)
{
e.Graphics.Clear(SystemColors.Control);
for (int i = 0; i < m_DrawCheckProgress.DrawRect.Length; i++)
{
e.Graphics.FillRectangle(m_DrawCheckProgress.DrawBush[i], m_DrawCheckProgress.DrawRect[i]);
}
e.Dispose();
}
}