C#事件传参

a291410855 2015-04-27 09:41:04
 private void button1_Click_1(object sender, EventArgs e)
{
string str="123";
Ping p = new Ping();
p.PingCompleted += new PingCompletedEventHandler(test);
//p.PingCompleted += test;
p.SendAsync("192.168.1.101", 1);
}

private void test(object sender, PingCompletedEventArgs e)
{
if (e.Reply.Status == IPStatus.Success)
{
MessageBox.Show("成功");
}
else
{
MessageBox.Show("失败");
}

}

如何把str传递到test方法中?
这里ping以后要加到for循环中,所以使用全局变量会有问题。
...全文
186 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
於黾 2015-04-27
  • 打赏
  • 举报
回复
其实所谓必须异步,只是保证效率的一种手段罢了 你完全可以用线程池来实现异步,而线程函数里用同步来做
a291410855 2015-04-27
  • 打赏
  • 举报
回复
引用 8 楼 Z65443344 的回复:
最简单的办法,你干脆别用异步了,改成同步,就不用考虑那么多问题了... 要么就按你后面的思路,不要都使用同一个ping对象
我先用我上面想到的方法吧。
a291410855 2015-04-27
  • 打赏
  • 举报
回复
引用 8 楼 Z65443344 的回复:
最简单的办法,你干脆别用异步了,改成同步,就不用考虑那么多问题了... 要么就按你后面的思路,不要都使用同一个ping对象
必须异步的。兄弟。
於黾 2015-04-27
  • 打赏
  • 举报
回复
最简单的办法,你干脆别用异步了,改成同步,就不用考虑那么多问题了... 要么就按你后面的思路,不要都使用同一个ping对象
a291410855 2015-04-27
  • 打赏
  • 举报
回复
引用 6 楼 Z65443344 的回复:
e.Reply.Address不就是IP吗
我要传的参数有很多。Msg,设备号,运行速度,停留时间。等等。 我现在所能想到的是
 public class SePing : Ping
    {
        /// <summary>
        /// 发送内容
        /// </summary>
        public string Msg { get; set; }
        /// <summary>
        /// 进入方式
        /// </summary>
        public int effect { get; set; }
        /// <summary>
        /// 停留时间
        /// </summary>
        public int speedStay { get; set; }
    }
然后从object sender中获取。
於黾 2015-04-27
  • 打赏
  • 举报
回复
e.Reply.Address不就是IP吗
a291410855 2015-04-27
  • 打赏
  • 举报
回复
引用 4 楼 duanzi_peng 的回复:
PingCompletedEventArgs 这个不是事件参数么??
要传递str.
exception92 2015-04-27
  • 打赏
  • 举报
回复
PingCompletedEventArgs 这个不是事件参数么??
a291410855 2015-04-27
  • 打赏
  • 举报
回复
引用 1 楼 Z65443344 的回复:
不明白你想干啥 test是个事件回调函数,不是你的代码去控制它执行的,而是等系统调用它 为什么要把123传进这里面去?? 什么ping以后加入循环,看不懂
 private void button1_Click_1(object sender, EventArgs e)
        {
            Ping p = new Ping();
            p.PingCompleted += new PingCompletedEventHandler(ping_Complete);//1
            for (int i = 101; i < 105; i++)
            {
                string str = "字符串" + i;
                p.SendAsync("192.168.1." + i, 1);
            }
        }
        private void ping_Complete(object sender, PingCompletedEventArgs e)
        {
            if (e.Reply.Status == IPStatus.Success)
            {
                //如果ping成功则发送str到显示屏
                MessageBox.Show("成功");
            }
            else
            {
                MessageBox.Show("失败");
            }
        }
a291410855 2015-04-27
  • 打赏
  • 举报
回复
引用 1 楼 Z65443344 的回复:
不明白你想干啥 test是个事件回调函数,不是你的代码去控制它执行的,而是等系统调用它 为什么要把123传进这里面去?? private void button1_Click_1(object sender, EventArgs e) { Ping p = new Ping(); p.PingCompleted += new PingCompletedEventHandler(ping_Complete);//1 for (int i = 101; i < 105; i++) { string str = "字符串" + i; p.SendAsync("192.168.1." + i, 1); } } private void ping_Complete(object sender, PingCompletedEventArgs e) { if (e.Reply.Status == IPStatus.Success) { //如果ping成功则发送str到显示屏 MessageBox.Show("成功"); } else { MessageBox.Show("失败"); } } 什么ping以后加入循环,看不懂
於黾 2015-04-27
  • 打赏
  • 举报
回复
不明白你想干啥 test是个事件回调函数,不是你的代码去控制它执行的,而是等系统调用它 为什么要把123传进这里面去?? 什么ping以后加入循环,看不懂
Forty2 2015-04-27
  • 打赏
  • 举报
回复
p.SendAsync("192.168.1.101", str); private void test(object sender, PingCompletedEventArgs e) { string str = e.UserState as string; ...

110,525

社区成员

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

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

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