C# 跨线程交互数据实例
时间: 2024-12-18 16:38:12 浏览: 0
C#多线程笔记实例
在C#中,跨线程交互数据时需要特别注意,因为主线程和工作线程之间默认是互斥访问共享资源的。这通常会引发竞态条件和死锁等问题。一种常见的做法是使用`lock`关键字、`Monitor`类或者`Interlocked`类来进行同步。
以下是使用`lock`关键字的一个简单示例:
```csharp
private object syncRoot = new object();
public void UpdateData(int newData)
{
lock (syncRoot)
{
// 在这里更新数据,假设有个变量data
data = newData;
// 数据更新操作
}
}
public void WorkerThreadFunction()
{
for (int i = 0; i < 10; i++)
{
int updateValue = GenerateNewValue(); // 模拟生成新值
ThreadPool.QueueUserWorkItem(state => UpdateData(updateValue));
}
}
```
在这个例子中,`UpdateData`方法在获取到`syncRoot`锁之后才修改共享的数据。这样可以保证任何时候只有一个线程能够访问并改变数据。
另外,还可以使用`BlockingCollection`或者`TaskCompletionSource`等异步编程模型来进行线程间的通信,确保数据在正确的时机传递给主线程。
阅读全文