解决方案 »

  1.   

    取决于你如何操作,windows消息队列是逐个发送的请求,但如果你用线程去操作数据库,那么又另当别论了
      

  2.   

    给你个思路,你可以延迟几百毫秒再确认是否要执行,每一次pressup都修正延迟时间
      

  3.   

     给你写了一个 demo private void textBox1_KeyUp(object sender, KeyEventArgs e)
    {
        var str = textBox1.Text;
        ThreadPool.QueueUserWorkItem(h =>
        {
            List<string> result = 查询(str);
            this.listBox1.BeginInvoke((Action)delegate
            {
                if (textBox1.Text == str)  //还没有改变为别的内容,str还有效
                {
                    this.listBox1.Items.Clear();
                    this.listBox1.Items.AddRange(result.ToArray());
                }
            });
        });
    }private List<string> 查询(string str)
    {
        var n = new Random().Next(1000);
        Thread.Sleep(n);    //卡一会儿
        return (from x in Enumerable.Range(0, 40)
                select str + "_" + x)
                .ToList();
    }
    你可以看到,假设每一次(快速)按下键盘之后数据库查询部分的响应速度有快有慢(先发出去的查询可能后返回结果),丢弃掉那些多余数据就是了。