0

我需要解决一个问题并需要一些输入。当我按下button1我的 gui 启动串行通信。我发送一些命令并接收一些数据。一旦我按下button1,我将在另一个线程(GUI 线程除外)中持续 3-4 秒,直到数据完全传输。我想要的是一个对话框,弹出或类似的东西(显示一条繁忙的消息)当我按下时出现在我的 gui 前面,button1并且这个弹出窗口在另一个线程中自动关闭,其中串行通信发生时整个数据被传输。

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

我还有一个建议“使用一个winform,将它的FormBorderStyle设置为FixedDialog。让它像一个消息框一样小,然后在上面放一个进度条控件。你可以在线程处理开始时使用表单ShowDIalog,最后关闭。为简单起见,进度条样式可以设置为连续。”

考虑到我的情况,有什么好的解释或替代的简单方法吗?我想让事情变得简单

4

4 回答 4

0

这是逻辑:

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

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

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

于 2013-02-23T13:00:55.463 回答
0

BackgroundWorker 确实是最好的选择。这里有一个非常详尽的 HowTo 。

于 2013-02-23T13:02:01.443 回答
0

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

于 2013-02-23T12:50:15.233 回答
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()关于等待表单的关闭,但我手边没有编译器可以检查。

于 2013-02-23T14:51:00.073 回答