private async void button4_Click(object sender, EventArgs e)
{
string ser = richTextBox1.Text;
await stringere(ser,new Progress<int>(UpdateProgress));
}
private void UpdateProgress(int value)
{
progressBar1.Value = value;
}
public static bool serg = false;
private async Task stringere(string ser, IProgress<int> progress)
{
//serewsdf().Wait();
Task task = Task.Factory.StartNew(() => {
Task.Delay(10000).Wait();
serg = true;
});
int progressValue = 0;
while (!task.IsCompleted)
{
await Task.Delay(1000);
progressValue += 10;
progressValue = Math.Min(progressValue, progressBar1.Maximum);
progressValue = Math.Max(progressValue, progressBar1.Minimum);
progress.Report(progressValue);
}
if (serg)
{
dataGridView2.Rows.Add(ser);
}
}
上列代码实现的主要功能是等待Task的途中我进度条也跟着变动 task完成我进度条也完成 后添加dgv的一个非常简单的案例
// 创建一个共享的变量
int sharedValue = 0;
object sharedValueLock = new object();
// 创建并启动第一个线程
Thread thread1 = new Thread(() =>
{
for (int i = 0; i < 1000; i++)
{
// 在访问共享变量之前加锁
lock (sharedValueLock)
{
sharedValue++;
}
}
});
thread1.Start();
// 创建并启动第二个线程
Thread thread2 = new Thread(() =>
{
for (int i = 0; i < 1000; i++)
{
// 在访问共享变量之前加锁
lock (sharedValueLock)
{
sharedValue++;
}
}
});
thread2.Start();
// 等待两个线程完成
thread1.Join();
thread2.Join();
// 输出最终的共享变量值
richTextBox1.AppendText(sharedValue.ToString());
两个线程应使用 lock 语句来保护共享变量,以避免数据竞争问题。