gpt4 book ai didi

c# - Windows 窗体的更新 - C#

转载 作者:太空宇宙 更新时间:2023-11-03 22:00:30 25 4
gpt4 key购买 nike

解释:

结构:Windows 窗体 - 三个组件:文本框、文本框响应和按钮。

问题:我正在使用 C# windows 窗体移动电机:我正在启动电机并反转
电机的运动方向,单击一次按钮,中间有 10 秒的延迟。即我启动电机,延迟 10 秒,然后反转电机。我想在开始时显示“开始”,在 10 秒延迟结束时显示“结束”。我试过使用线程,但它不起作用。但我只能在文本框中看到“完成”而不是“开始”。代码如下:

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

namespace SampleThreadProgram
{
public partial class Form1 : Form
{
static EventWaitHandle _waitHandle = new AutoResetEvent(false);
delegate void SetTextCallback(string text);

void SetText(string text)
{
if (textBox.InvokeRequired)
{
SetTextCallback d = new SetTextCallback(SetText);
BeginInvoke(d, new object[] { text });
}
else
{
textBox.Text = text;
}
}

void UpdateTextBox(string message)
{
SetText(message);
_waitHandle.Set();
}

void Wait()
{
for (ulong i = 0; i < 10000; i++)
{
for (ulong j = 0; j < 100000; j++)
{
}
}

}
public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{

}

private void button1_Click(object sender, EventArgs e)
{

UpdateTextBox("Start");
_waitHandle.WaitOne();
Thread.Sleep(10000);
UpdateTextBox("Finish");

}

}
}

最佳答案

  1. 您不应该使用很长的 for 循环来让计算机等待一段时间。至少使用 Thread.Sleep
  2. 您应该使用 BackgroundWorker 来完成您想要做的事情。在按钮点击事件中设置开始文本,然后启动后台 worker 。您可以让 DoWork 事件做一些工作(在本例中为 sleep )并使用 WorkerCompleted 事件更新 UI。

使用后台 worker 的好处是您无需担心从非 UI 线程更新代码。在按钮单击事件中,您可以直接更新文本框的文本,并且 BackGroundWorker 线程已经确保 Completed 事件在 UI 线程中运行,所以即使在那里您可以直接访问 UI 控件。 BGW 专门设计用于简化这种情况。

关于c# - Windows 窗体的更新 - C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10338723/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com