我最近要做一个短信群发的程序,有一个页面sendsmsPage是把群发短信内容(接受人,姓名等)存入队列然后再将它放到另外一个页面smsListPage的待发列表里面,由于可能要用线程完成待发列表中每一个item的操作(取消发送啊优先发送等),所以要用线程和互斥锁来对列表里面的资源进行访问.我在smsListPage的类里面创建了一个Mutex mtx,把它设定为静态变量,然后用一个静态方法public static void addtolist(Queue que),这个函数是用来将sendsmsPage中传过来的属性添加到待发列表sendingList(是listview控件),那由于要对临界资源进行插入操作所以用mtx来加一个临界区。问题就来了:
在同一个类里面我有取消发送sendcancel 优先发送sendfirst这两个按钮,分别也要对列表进行临界资源的访问,我也加了临界区,这两个运行的很正常。由于我是在sendsmsPage里面调用了smsListPage里面的静态方法addtolist,但是当临界区上锁的时候短信内容还是成功添加到了待发列表,没有锁住。各位大虾,这是肿么回事啊??
在同一个类里面我有取消发送sendcancel 优先发送sendfirst这两个按钮,分别也要对列表进行临界资源的访问,我也加了临界区,这两个运行的很正常。由于我是在sendsmsPage里面调用了smsListPage里面的静态方法addtolist,但是当临界区上锁的时候短信内容还是成功添加到了待发列表,没有锁住。各位大虾,这是肿么回事啊??
解决方案 »
- WPF的用户控件如何访问主窗体的函数和控件?
- 在用SHDocVw和mshtml的webbrowser中,如何用C#代码动态添加元素?
- datatable 顺序
- 鼠标拖动控件,只有控件边框跟着鼠标移动,当MouseUp时控件到位!
- 一个奇怪的问题?想Access中插入数据和查询数据??
- 某个DataTable中的DataColumn为DateTime类型时,绑定到TextBox后怎样让它不显示时间部分?
- c\s获取控件对象的方法
- 小弟诚心向各位大神求解关于InstallSheild打包时出现的异常
- aspx 中 c# 提示信息怎样写?
- 浏览器打开xml文件保留对话框
- c# 怎么向 webBrowse 中选中的控件粘贴文本
- 新手请教 提取邮箱用户名和域名 问题
public static void AddToSendingList()
{
mtx.WaitOne();
Thread.Sleep(5000);
while (SendSmsPage.SendingSmsQue.Count != 0)
{
smsInfo smsinfo = (smsInfo)SendSmsPage.SendingSmsQue.Dequeue();
SendingSmsListDataTable.Rows.Add("状态", smsinfo.getTelNum()+num.ToString(), " ", smsinfo.getSmsContent());
}
mtx.ReleaseMutex();
}以下是调用它的页面SendSmsPage中的一段代码 private void sendBtn_Click(object sender, RoutedEventArgs e)
{
//////////1.进入待发列表
smsInfo smsinfo=new smsInfo(telTxtBx.Text,contentTxtBx.Text);
SendingSmsQue.Enqueue(smsinfo); SendingListPage.AddToSendingList();
以下省略
}