小弟刚做不久 比叫菜.问的问题大家不要见笑 谢谢.
    在一个窗体LOAD事件了我用Thread.Sleep(4000);让他等待4秒,而在这4秒中用户有可能按键盘,这样如果用户按了我希望触发一个KeyPress事件,同时在KeyPress事件中取得用户按的哪个键.并把这个键的信息ToString()之后伏值给一个Class级别的字符串变量.在触发完KeyPress事件后我希望,程序能继续回到load事件中执行Thread.Sleep(4000);后面的代码.当然如果没有触发KeyPress事件继续执行下面的.
            int j = random.Next(4);
            this.pictureBox1.Image = Image.FromFile("d:\\Experiment\\" + j + ".bmp");
            label1.Text = "";
            label2.Text = "";
            System.Threading.Thread.Sleep(4000);
            if (!this.flag == "1" && !this.flag == "2")
            {
                MessageBox.Show("选择超时", "选择错误",MessageBoxButtons.OK,MessageBoxIcon.Error);
            }
            else
            { }
            Form4 newform4 = new Form4();
            this.Close();
            newform4.Show();
        }        private void Form3_KeyPress(object sender, KeyPressEventArgs e)
        {
            this.flag = Console.ReadKey().ToString();
        }

解决方案 »

  1.   

    一点示例,应该能解决你的问题
    private void YouMethod()
    {
    //YouMethod
    Thread.Sleep(4000);
    MessageBox.Show("aaaaa");
    }
    private void test()
    {
    Thread TestThread=new Thread(new ThreadStart(YouMethod));
    TestThread.Start();

    } private void Form1_Load(object sender, System.EventArgs e)
    {
    this.KeyPreview=true;
    test();
    } private void Form1_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
    {

    MessageBox.Show(e.KeyChar.ToString());
    }
      

  2.   

    可以用timer来做操作超时的功能
      

  3.   

    看看焦点在什么地方,把那个地方继承一下,自己加个 事件就可以了啊
    比如我继承了一个BUTTON:
    using System;namespace lijie
    {
    /// <summary>
    /// ClassJCBT 的摘要说明。
    /// </summary>
    public class ClassJCBT:System.Windows.Forms.Button
    {
    public ClassJCBT()
    {
    //
    // TODO: 在此处添加构造函数逻辑
    //
    } public event System.EventHandler LJ; protected override void OnKeyDown(System.Windows.Forms.KeyEventArgs e)
    {
    if(LJ != null)
    LJ(null,null);
    if(e.KeyCode == System.Windows.Forms.Keys.D1)
    this.Text = "你按下了数字键“1”";
    if(e.KeyCode == System.Windows.Forms.Keys.D2)
    this.Text = "你按下了数字键“2”";

    base.OnKeyDown (e);
    }
      

  4.   

    楼上的程序感觉有问题,
    主线程执行的时候子线程也在执行,如果去年你的那个MessageBox.Show("aaaaa");
    你再看看是否会再现你所谓的结果???
    用Thread.Sleep(4000);不是个好招,一执行它,所有的线程全部停止,而不是某一个线程停止。
    方法俺也不会,顶一下吧……
      

  5.   

    Load没结束没法触发KeyDown事件.你把线程Sleep结束了,那么只能多线程做.多线程还得控制同一个时间标准.不然你的4秒就毫无意义了.如果只是想让别人看不到东西,不如就用timer然后过了时间后把属性修改成可见.