1

我的串口正在接收大量数据,大约需要 5 秒才能完成传输数据。我想在 C# 中使用进度条。

如何识别应用进度条的数据传输结束?

(数据大小不变且清晰)

4

2 回答 2

0

我假设您正在使用该System.IO.SerialPort课程?在“是”的情况下,SerialPort该类有一个DataReceived事件:

http://msdn.microsoft.com/en-us/library/system.io.ports.serialport.datareceived.aspx

每次通过串行端口接收数据时都会触发。现在假设您知道您需要接收 5 个字节。在开始接收数据之前,您将进度条的最大值设置为 5:

progressBar1.Maximum = 5;

然后,当您收到数据时,随着您收到的数据量增加进度条:

    private static void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
{
    SerialPort sp = (SerialPort)sender;
    int BytesReceivedCount = sp.BytesToRead;

    if(InvokeRequired)
    {
        Invoke((Action)(() =>
        {
            progressBar1.Value += BytesReceivedCount;
        }));
    }
    else
        progressBar1.Value += BytesReceivedCount;
}
于 2013-08-24T18:21:02.107 回答
0

.net 框架的SerialPort类可以轻松为您做到这一点。它支持同步和异步传输模式。为您的案例使用异步模式并使用DataReceived事件来更新您的进度条。它只是 (TotalBytesReadTillNow / TotalDataSize) * 100。将其分配给progressbar.value.

另请注意,在异步编程中,您无法从非 UI 线程更新控件或其他 UI 内容。用于Invoke更新您的 UI。

上面的链接包含一个很好的示例。

于 2013-08-24T18:21:19.760 回答