求大神相助,非常急不胜感激
求大神帮助,非常急,不胜感激

如图所示,我按下开始按钮,开始采集数据,并将数据写至textbox中,但此时停止按钮无法按动。控制代码如下:
private void buttonStart_Click(object sender, EventArgs e)
{
tempSample.Initialize();
Thread.Sleep(3000);
string[] display = new string[4];
do
{
Trace.WriteLine("已进入Textbox显示循环");
for (int i = 0; i < 4; i++)
{
display[i] = GlobalVariant.TemperatureOutputData[i].ToString() + "\r\n";
TextBoxDataOutput.AppendText(display[i]);
}
Thread.Sleep(1000);
//GlobalVariant.SampleCount++;//SampleCount++
//count++;
//if (count > 10)
//break;
} while (tempSample.dataFlag);
}
采集数据线程为后台线程,必须通过按下停止按钮才可将tempSample.dataFlag置为false,这就必须跳出向textbox赋值循环,请问怎么解决,或者有更好的向textbox循环赋值的操作吗?
------解决思路----------------------
当然无法停下了,因为你之前的点击事件都没停下来呢,也就是主窗体还在等待按钮结束响应
你这个应该是通过Thread来获取数据,然后通过Invoke来更新UI,这个你可以查下在线程中更新UI的内容,随便查查都是代码
然后你的结束按钮才可以点击,当然你想怎么结束就是你的事情了,反正你也是客户端,直接设置个全局的变量就可以
------解决思路----------------------
点击事件中写循环占用了前台线程, 界面都会卡死吧, 应该放到线程中采集, 同时导致几个跨线程的问题.
1 在退出的时候要让后台线程退出
2 后台线程的数据显示到界面上是跨线程,要用窗体的 Invoke 方法.
------解决思路----------------------
这个不卡死,解决之后别忘结贴,不枉我也写了一段。
如图所示,我按下开始按钮,开始采集数据,并将数据写至textbox中,但此时停止按钮无法按动。控制代码如下:
private void buttonStart_Click(object sender, EventArgs e)
{
tempSample.Initialize();
Thread.Sleep(3000);
string[] display = new string[4];
do
{
Trace.WriteLine("已进入Textbox显示循环");
for (int i = 0; i < 4; i++)
{
display[i] = GlobalVariant.TemperatureOutputData[i].ToString() + "\r\n";
TextBoxDataOutput.AppendText(display[i]);
}
Thread.Sleep(1000);
//GlobalVariant.SampleCount++;//SampleCount++
//count++;
//if (count > 10)
//break;
} while (tempSample.dataFlag);
}
采集数据线程为后台线程,必须通过按下停止按钮才可将tempSample.dataFlag置为false,这就必须跳出向textbox赋值循环,请问怎么解决,或者有更好的向textbox循环赋值的操作吗?
------解决思路----------------------
当然无法停下了,因为你之前的点击事件都没停下来呢,也就是主窗体还在等待按钮结束响应
你这个应该是通过Thread来获取数据,然后通过Invoke来更新UI,这个你可以查下在线程中更新UI的内容,随便查查都是代码
然后你的结束按钮才可以点击,当然你想怎么结束就是你的事情了,反正你也是客户端,直接设置个全局的变量就可以
------解决思路----------------------
点击事件中写循环占用了前台线程, 界面都会卡死吧, 应该放到线程中采集, 同时导致几个跨线程的问题.
1 在退出的时候要让后台线程退出
2 后台线程的数据显示到界面上是跨线程,要用窗体的 Invoke 方法.
------解决思路----------------------
这个不卡死,解决之后别忘结贴,不枉我也写了一段。
private void button1_Click(object sender, EventArgs e)
{
(new System.Threading.Tasks.Task(abc)).Start();
}
private void abc()
{
for (int i = 0; i <= 20; i++)
{
this.Invoke(new Action(() => { this.textBox1.Text = i.ToString(); }));
//按1秒循环
System.Threading.Thread.Sleep(1000);
}
}