下面是一个示例代码,演示如何在C#中实现计算列表的数据和刷新ListView
控件的数据的并发执行:
cs
using System;
using System.Collections.Generic;
using System.Threading;
using System.Windows.Forms;
class Program
{
static List<int> dataList = new List<int>();
static ListView listView = new ListView() { View = View.Details };
static void Main()
{
// 添加列头
listView.Columns.Add("Data");
// 启动两个线程并发执行计算和刷新列表的操作
Thread computeThread = new Thread(() => ComputeData(10, 20));
computeThread.Start();
Thread refreshThread = new Thread(() => RefreshListView());
refreshThread.Start();
Application.Run(new Form() { Controls = { listView } });
}
static void ComputeData(int a, int b)
{
int sum = a + b;
Console.WriteLine($"Sum of {a} and {b} is {sum}");
lock (dataList)
{
dataList.Add(sum);
}
}
static void RefreshListView()
{
while (true)
{
Thread.Sleep(1000);
lock (dataList)
{
listView.Items.Clear();
foreach (var data in dataList)
{
listView.Items.Add(new ListViewItem(data.ToString()));
}
}
}
}
}
在这个示例中,我们创建了一个ListView
控件用来显示数据。然后启动了两个线程,一个用来计算数据并添加到列表中,另一个用来刷新ListView
控件的数据。在计算数据时我们使用了lock
保护dataList
,确保数据的线程安全性。在刷新ListView
时也同样使用了lock
来避免多线程访问导致的并发问题。
请注意,这个示例中使用了Thread.Sleep(1000);
来模拟每隔一秒刷新一次ListView
的操作。在实际应用中,您可以根据具体需求来调整刷新频率。此外,为了在Windows窗体应用程序中运行,我们使用了Application.Run
方法启动了主窗体。