用户等待一段时间

时间:2013-02-23 12:44:26

标签: c#

我需要修复问题并需要一些输入。当我按button1时,我的gui开始串行通讯。我发送一些命令并接收一些数据。一旦我按button1,我就在另一个线程(GUI线程除外)中3-4秒,直到数据完全传输完毕。我想要的是一个对话框,弹出或者某些类似的东西(显示一条忙碌的信息)出现在我的gui面前当我按下button1时这个pop会在另一个串口通讯的线程中自动关闭正在传输整个数据。

有人建议BackgroundWorker,但我不清楚。

我还得到了一个建议“使用winform,将其FormBorderStyle设置为FixedDialog。将其设置为像消息框一样小,并在其上删除进度条控件。您可以在线程处理开始时使用表单ShowDalog,并且最后关闭。进度条样式可以设置为连续的简单。“

考虑到我的情景,有什么好的解释或其他简单方法吗? 我想保持简单

4 个答案:

答案 0 :(得分:0)

您可以使用表单上的Label或使用进度条设置简单消息,并在执行少量命令后更新进度条。如果您的命令集已由用户指令启动,那么就可以了。 如果你必须与设备通信并响应设备警报,那么C#中的serialport的DataReceivedEvent工作正常。你可以写你的代码。当设备将日期传输到应用程序并在后台运行时,此事件会被触发。

答案 1 :(得分:0)

这是逻辑:

  
      当用户点击button1时,
  • 显示弹出框。
  •   
  • 虽然如此,数据传输代码也应该在同一个线程中。
  •   
  • 然后编写代码以获取所有数据将被传输的点。 @那个点让对话框消失。
  •   

如果您需要任何示例代码,请发布您编写的代码,以便我可以提供实用的代码来向您展示逻辑。

希望您了解或更好地发布您的代码。

答案 2 :(得分:0)

BackgroundWorker确实是最好的选择。有一个非常彻底的HowTo权利here

答案 3 :(得分:0)

您没有说明您正在运行的.net版本,因此我将提供这两种方法:

.net 4:

void OnButton1Click(Object sender, EventArgs e)
{

    var waitDailog = new frmWait();
    waitDialog.ShowDialog();

    var task = new Task(() = 
    {
        // Serial communitcation or whatever will take a long time here
    })
    .ContinueWith(result =>
    {
        waitDialog.Close();
    })
    .Start();
}

.net 3:

private frmWait _waitDialog;

void OnButton1Click(Object sender, EventArgs e)
{

    _waitDailog = new frmWait();
    waitDialog.ShowDialog();

    var thread = new Thread(OnThread);
    thread.Start();
}

void OnThread()
{
    // Serial communitcation or whatever will take a long time here

    _waitDailog.Close();
}

在这两种情况下,等待对话框只是一个表单,带有某种动画和消息以显示等待。

在等待表单关闭时可能还需要一些Invoke(),但我没有一个编译器可以近距离检查。