我想实现的是: 在线程一中:
不断的从数据库中读取数据信息匹配
当匹配出 达到我们监控的要求后 我会把这条信息 存储在 全局的 datatable中 在线程二中:
我会对datatable中的数据一条条的删除 数据匹配存储这个过程是一直进行的 不能受打扰,即使在datatable被线程二使用着,也要马上让给
线程一去操作。不知道能否实现这样的效果不??想过用lock,lock(datatable),这样实现我的功能,不知这样是否正确??
不断的从数据库中读取数据信息匹配
当匹配出 达到我们监控的要求后 我会把这条信息 存储在 全局的 datatable中 在线程二中:
我会对datatable中的数据一条条的删除 数据匹配存储这个过程是一直进行的 不能受打扰,即使在datatable被线程二使用着,也要马上让给
线程一去操作。不知道能否实现这样的效果不??想过用lock,lock(datatable),这样实现我的功能,不知这样是否正确??
解决方案 »
- 访问webbrowser的scrollbar
- .net2.0如何实现树形结构产品类别?
- 列举一个动态绑定(又称后绑定)的例子,并说明什么是动态绑定???
- 怎样把下拉列表中的项通过一个按钮事件添加到列表视图里面?
- FileSystemWatcher监视文件变化,为什么一次changed变化中事件方法调用2次!?在线等待!!
- 关于linq的Distinct问题
- 如何部署三层数据结构的应用程序??
- 谁有类似站内OICQ的C#源代码
- VS.net 7中的MSDN文档是不是不完整?
- 一个全新的关于.net技术的网站--XML中华网(www.xmlchina.net)!
- 高分求怎么显示
- .net连接MYsql引用MySql.Data.MySqlClient
用锁也是一样的,无论是用信号量还是锁都只要在操作datatable的时候用,换句话说就是尽量减少信号量或锁的控制范围。
{
public void SpinUp()
{
ThreadStart start = new ThreadStart(this.Start);
Thread _thread = new Thread(start);
_thread.Start();
}
private void Start()
{
for (int i = 1; i <= 5; i++)
{
Thread.Sleep(1000);//实现延迟启动
Delete.sem.Reset();//强行暂停Delete把控制句柄交给Insert
Console.WriteLine("新增第 " + i.ToString() + " 行");
Manage.d.Rows.Add(new object[] { i, i.ToString() });
Delete.sem.Set();// 释放Delete
}
Delete.fi = 1;
}
}
public class Delete
{
public static ManualResetEvent sem = new ManualResetEvent(false);
public static int fi = 0;
public void SpinUp()
{
ThreadStart start = new ThreadStart(this.Start);
Thread _thread = new Thread(start);
_thread.Name = "Delete";
_thread.Start();
}
private void Start()
{
do
{
sem.WaitOne(); for (int i = Manage.d.Rows.Count-1; i >= 0; i--)
{
Console.WriteLine("删除第 " + Manage.d.Rows[i][0] + " 行");
Manage.d.Rows[i].Delete();
}
} while (fi == 0);
Console.WriteLine("所剩行数: " + Manage.d.Rows.Count.ToString());
Console.ReadLine();
}
}
class Manage
{
public static DataTable d = new DataTable();
public Manage()
{
DataColumn dc1 = new DataColumn("ID");
DataColumn dc2 = new DataColumn("value");
d.Columns.AddRange(new DataColumn[] { dc1, dc2 });
}
public void start()
{
Insert i = new Insert();
i.SpinUp();
Delete de = new Delete();
de.SpinUp();
}
}
你好,我想问 lock 可以替换你写的那段代码吗?? 替换了,能达到你那效果不??