C# 线程 ListView

标签 c# winforms multithreading listview

我是 .net 的新手,我仍然在努力理解很多事情,现在我正在尝试完成一些相对简单的事情,但每次都失败了,我想补充一点我的程序的一个线程,该线程将负责执行到 Web 服务器的上传操作,并保持我的程序响应,通过更新 ListView 向用户提供操作反馈,用户将在其中看到文件的所有状态上传。

我不知道如何将此线程放入程序中以使其具有响应能力,到目前为止我找不到任何示例,我正在尝试找到一个小示例来向我展示 Thread 和 WinForms 的使用行动。

最佳答案

您需要使用的是BackgroundWorker。它就是专门为此目的而设计的。

private void button1_Click(object sender, EventArgs e)
{
    BackgroundWorker bgw = new BackgroundWorker();

    bgw.DoWork += (_, args) => LongRunningTask(bgw);
    bgw.WorkerReportsProgress = true;
    bgw.ProgressChanged += (_, args) =>
    {
        textbox1.Text = args.ProgressPercentage.ToString();
    };
    bgw.RunWorkerCompleted += bgw_RunWorkerCompleted;

    bgw.RunWorkerAsync();
}

private void LongRunningTask(BackgroundWorker bgw)
{
    for (int i = 0; i < 10; i++)
    {
        Thread.Sleep(1000);//placeholder for real work
        bgw.ReportProgress(i);
    }
}

private void bgw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
    //do stuff when completed.
}

需要注意的一个关键点是,DoWork 事件在后台线程中运行,但其他事件都在 UI 线程中运行。 BackgroundWorkder 类负责确保所有这些都独立完成。

关于C# 线程 ListView ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13274990/

相关文章:

c# - Socket Send方法...用一个方法发送大量数据可以吗?

c# - 使用单个集合来保存所有参数

c# - 如何在代码中更改 Xaml 资源中的颜色定义 (UWP)

c# - 打字时显示类似智能感知的窗口(无法获得正确的坐标)

java - 停止 java 线程而不引用它

c# - 调用私有(private)方法保留调用栈

c# - 如何在保持控件可见的同时向 c# 表单添加透明度?

c# - 为什么 'await'会改变WinForms program.cs中的线程上下文

c++ - 线程是否共享一些类字段?

java - 浏览器支持 Java Applet 的线程吗?