c# 多线程 匿名委托调用方法,方法代码没执行

寂小魔 2013-05-02 03:42:03
vs2010
我使用线程数组创建多个线程,然后线程用匿名委托调用带参数的方法,方法却没执行。
代码如下:

Thread[] TdSend;
//执行方法
private void Send(string user,string pwd)
{
//代码块。这里在断点调试时,根本没有进入
}

private void btn_send_Click(object sender, EventArgs e)
{
DataSet ds = eDao.GetSendInfo();
if (ds == null)
{
MessageBox.Show("获取信息失败!", "提示:");
return;
}
dtAccount = ds.Tables["Account"];
dtAddress = ds.Tables["Address"];
TdSend = new Thread[int.Parse(tb_ThreadNum.Text)];
for (int k = 0; k < TdSend.Length; k++)
{
string user = dtAccount.Rows[0]["UserName"].ToString();
string pwd = dtAccount.Rows[0]["PassWord"].ToString();
dtAccount.Rows.RemoveAt(0);
TdSend[k] = new Thread(delegate() { Send(user, pwd); });
TdSend[k].Start();
}
}

对线程不是太熟悉,请问这个是原因造成的?断掉调试 就没有进入过 Send 方法
...全文
239 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
md5e 2013-05-02
  • 打赏
  • 举报
回复
TdSend[k].Start();
TdSend[k].Join();

上加join还好,如果不加join出来的结果有时的不正确的
寂小魔 2013-05-02
  • 打赏
  • 举报
回复
引用 4 楼 juyangjia 的回复:
我测试结果更蛋疼。。。。

static Thread[] TdSend;
        static void Main(string[] args)
        {
            TdSend = new Thread[3];
            string a = "1";
            string b = "2";
            for (int k = 0; k < TdSend.Length; k++) {
                TdSend[k] = new Thread(delegate() { test(a,b); });
                TdSend[k].Start();
            }
            int c=0;//断点1
            Console.ReadLine();
        }

        public static void test(string user, string pwd)
        {
//断点2
        }
    }
断点2只进去2次,断点1不进去。
谢谢了,我已经找到问题所在了,我在click事件里面 有个循环的代码块没贴出来。 循环跳出的前提 是要执行线程方法。 这样造成了死循环。 我把循环在用线程去执行 就OK了。
please_call_me_J 2013-05-02
  • 打赏
  • 举报
回复
static Thread[] TdSend;
        private static readonly object lck = new object();
        static void Main(string[] args)
        {
            TdSend = new Thread[3];
            string a = "1";
            string b = "2";
            for (int k = 0; k < TdSend.Length; k++) {
                TdSend[k] = new Thread(delegate() { test(a,b); });
                TdSend[k].Start();
            }
            int c=0;//断点1
            Console.ReadLine();
        }

        public static void test(string user, string pwd)
        {
            lock (lck)
            {
                int d;//断点2
            }
        }
这次进入的顺序是:断点2、断点1、断点2、断点2 好歹也进了方法,你的没进真不明白为什么了
please_call_me_J 2013-05-02
  • 打赏
  • 举报
回复
我测试结果更蛋疼。。。。

static Thread[] TdSend;
        static void Main(string[] args)
        {
            TdSend = new Thread[3];
            string a = "1";
            string b = "2";
            for (int k = 0; k < TdSend.Length; k++) {
                TdSend[k] = new Thread(delegate() { test(a,b); });
                TdSend[k].Start();
            }
            int c=0;//断点1
            Console.ReadLine();
        }

        public static void test(string user, string pwd)
        {
//断点2
        }
    }
断点2只进去2次,断点1不进去。
寂小魔 2013-05-02
  • 打赏
  • 举报
回复

        private void btn_send_Click(object sender, EventArgs e)
        {
            DataSet ds = eDao.GetSendInfo();
            if (ds == null)
            {
                MessageBox.Show("获取信息失败!", "提示:");
                return;
            }
            dtAccount = ds.Tables["Account"];
            dtAddress = ds.Tables["Address"];
            TdSend = new Thread[int.Parse(tb_ThreadNum.Text)];
            for (int k = 0; k < TdSend.Length; k++)
            {
                string user = dtAccount.Rows[0]["UserName"].ToString();
                string pwd = dtAccount.Rows[0]["PassWord"].ToString();
                dtAccount.Rows.RemoveAt(0);
                TdSend[k] = new Thread(delegate() { Send(user, pwd); });
                TdSend[k].Start();
            }
            //线程里的方法 一定要在这个事件执行完后才开始执行线程的方法吗?
            //我这下面还有一个 while 的循环
        }
please_call_me_J 2013-05-02
  • 打赏
  • 举报
回复
突然想到了 方法不能有参数
please_call_me_J 2013-05-02
  • 打赏
  • 举报
回复
System.Threading.ThreadStart threadMethod; threadMethod = new System.Threading.ThreadStart(m); System.Threading.Thread thread = new System.Threading.Thread(threadMethod); thread.Start(); 我一般这么用的。。。你试试吧,不是就算了

111,125

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧