问一个winform程序,比较急,大家来解答下

Tony_Xian 2017-11-25 12:52:42
需求:有一个tabcontrol控件,里面有两个tabpage页面,A类型和B类型各有一个初始值为000.0的label,每个页面都有一个开始的按钮,按下开始时,000.0这个数值会不断增大,以A类型为例,程序中每次循环增大0.2,当增大到10时,停止3秒(这3秒一直为 10),3秒后这个数值每次循环增大0.2,当增大到10 + 15 = 25时,又停止3秒(这3秒一直为25),3秒后继续以0.2增大,当增大到15 + 15 + 20 = 45时,停止3秒(这3秒一直为45),3秒后继续以0.2增大,以此类推,一直这样到最后一个增大到10 + 15 + 20 +
17 + 25 + 16 = 103时,弹出显示框表示完成,同理,B中的000.0也是这样做。
A类型中10 ,15,20,17,25,16分别用label1 - label 6表示,B类型的 10 9 15 7 5 11分别用label7 - label12表示,两个000.0分别是labelA和labelB
要求:在下面的程序中修改,最好不要重写,aValue和bValue的值必须在同一线程,谢谢
我在下面贴出代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Threading;
using System.Collections.Generic;

namespace TestData
{
public partial class Form1 : Form
{
//线程参数
private Thread read_thread; //数据读线程
private Thread datahandler_thread; //数据处理

//数据存储列表
List<string> aAutoRead = new List<string>();
List<string> bAutoRead = new List<string>();

//变量
int aCount = 0; //A类型数据个数
int bCount = 0; //B类型数据个数
double aValue = 0;
double bValue = 0;
bool a_Start = false;
bool b_Start = false;
public Form1()
{
InitializeComponent();
Init();
}

public void Init()
{
read_thread = new Thread(ReadCycle);
read_thread.IsBackground = true;
read_thread.Priority = ThreadPriority.BelowNormal;
read_thread.Start();

datahandler_thread = new Thread(DataProcess);
datahandler_thread.IsBackground = true;
datahandler_thread.Priority = ThreadPriority.BelowNormal;
datahandler_thread.Start();
}

public delegate void UpdateText(string data, string labtext);

public void ReadCycle()
{
while (true)
{
Thread.Sleep(10);
if (a_Start)
{
aAutoRead.Add(aValue.ToString("000.0"));
aValue += 0.2;
}
if (b_Start)
{
bAutoRead.Add(bValue.ToString("000.0"));
bValue += 0.2;
}
}
}

public void DataProcess()
{
while (true)
{
Thread.Sleep(50);
if (aAutoRead.Count > 0)
{
if (aAutoRead == null)
continue;
CycleUpdateGuiDisplay(aAutoRead[aCount++], labelA.Text);
}
if (bAutoRead.Count > 0)
{
if (bAutoRead == null)
continue;
CycleUpdateGuiDisplay(bAutoRead[bCount++], labelB.Text);
}
}
}

public void CycleUpdateGuiDisplay(string data, string labtext)
{
UpdateText labelText = new UpdateText(UpdateTextMethod);
BeginInvoke(labelText, new object[] { data, labtext });
}

public void UpdateTextMethod(string data, string labtext)
{
if (tabControl1.SelectedTab == tabPage1 && labtext == labelA.Text)
labelA.Text = data;
if (tabControl1.SelectedTab == tabPage2 && labtext == labelB.Text)
labelB.Text = data;
}

private void button1_Click(object sender, EventArgs e)
{
if (button1.Text == "开始")
a_Start = true;
}

private void button2_Click(object sender, EventArgs e)
{
if (button2.Text == "开始")
b_Start = true;
}
}
}

...全文
292 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Tony_Xian 2017-11-25
  • 打赏
  • 举报
回复
没有人解答吗,来个人啊啊啊啊啊
圣殿骑士18 2017-11-25
  • 打赏
  • 举报
回复
你这个需求,适合用Task呀。每阶段的循环用不同的Task实现,然后再把多个Task按先后组装在一起。
无情时尚 2017-11-25
  • 打赏
  • 举报
回复
看了你的代码找不到逻辑,看这个行不




using System;
using System.Collections.Generic;
using System.Threading;
using System.Windows.Forms;


namespace WindowsFormsApplication3
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();

Init();
}

private List<string> AList = new List<string>();
private List<string> BList = new List<string>();
private void Init()
{
AList.Add(label1.Text);
AList.Add(label2.Text);
AList.Add(label3.Text);
AList.Add(label4.Text);
AList.Add(label5.Text);
AList.Add(label6.Text);

BList.Add(label7.Text);
BList.Add(label8.Text);
BList.Add(label9.Text);
BList.Add(label10.Text);
BList.Add(label11.Text);
BList.Add(label12.Text);
}

private void btnAstart_Click(object sender, EventArgs e)
{
UpdateControl(label15, AList, AList.Count);
}

private void btnBstart_Click(object sender, EventArgs e)
{
UpdateControl(label16, AList, AList.Count);
}

private void UpdateControl(Control c, List<string> typeList, int listCount)
{
int labTime = 0;
double value = 0;
double time = Convert.ToDouble(typeList[labTime]);

ThreadPool.QueueUserWorkItem(delegate
{
while (listCount > 0)
{
Thread.Sleep(50);

value += 0.2;
string content = value.ToString("000.0");

this.BeginInvoke((EventHandler) delegate { c.Text = content; });

if (time == Convert.ToDouble(content))
{
listCount--;

if (listCount >= 1)
{
labTime++;
time += Convert.ToDouble(typeList[labTime]);
Thread.Sleep(3000);
}
else
{
MessageBox.Show("完成!退出!显示提示框!");
}
}
}
});
}
}
}

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧