110,534
社区成员
发帖
与我相关
我的任务
分享
{
zcname = rd["cname"].ToString();
zcname2 = rd["cname2"].ToString();
var t2 = new Timer();
tt_list.Add(t2);
t2.Interval = 1000;//-----------------------------这里第一次是延时的
var copy1 = zcname;
var copy2 = zcname2;
t2.Tick += (s1,e1)=>
{
模拟打字操作(copy1,, copy2);
t2.Stop();
};
t2.Start();
}
这里,动态产生 n 个(n==你的记录数量)定时器,每一个单独干自己的事情。windows 和 .net 从底层到应用层都可以优化定时器机制。然后每一个定时器的 Tick 事件处理方法中,要使用匿名委托方式封装 zcname 和 zcname2 的副本,而不是直接使用 zcname 和 zcname2,因为这两个变量在执行到“摸你打字操作”方法时早已经去引用其它对象了,而不是引用循环过程中正确的对象。
你要画流程图,表达清楚流程。如果只会给“代码相面”那么其实做不出什么来。我们看一个程序员,不是看他抄什么代码来,不是看这个皮毛,而是看他脑子里为代码背后所建立的“立体的”流程图到底是什么。 public int num = 0;
Timer tt = new Timer();//输入字
public string zcname = "";
public string zcname2 = "";
private void btnHz_Click(object sender, EventArgs e)
{
if(btnHz.Text=="模式启动")
{
string sql = "select * from sword inner join suser on sword.sid=suser.sid where ctype=" + 1 + " order by stype desc,cdate desc,cid desc";
MySqlConnection conn = new MySqlConnection(connStr);
MySqlCommand cmd = new MySqlCommand(sql, conn);
conn.Open();
MySqlDataReader rd = cmd.ExecuteReader();
wbr.Visible = true;
wbr.Url = new Uri("http://www.abc.com");
while (rd.Read())
{
zcname = rd["cname"].ToString();
zcname2 = rd["cname2"].ToString();
tt.Interval = 1000;//-----------------------------这里第一次是延时的
tt.Tick += new EventHandler(tt_Tick);//----------这里间隔时没起到延时作用
tt.Start();
}
rd.Close();
conn.Close();
}
else
{
wbr.Visible = false;
}
}
public void tt_Tick(object sender, EventArgs e)
{
this.wbr.Document.GetElementById("key").Focus();
string kw = zcname;
if(num==kw.Length)
{
System.Windows.Forms.SendKeys.Send("{Enter}");
tt.Stop();
tt2.Interval = 4000;
tt2.Tick += new EventHandler(tt_Tick1b);
tt2.Start();
}
else
{
SendKeys.Send(kw[num].ToString());
num++;
}
}