public partial class Form1 : Form
    {
        ulong i = 0;
        public Form1()
        {
            InitializeComponent();
            this.timer1.Interval = 1;
            this.timer1.Start();
        }        private void timer1_Tick(object sender, EventArgs e)
        {
            if (i < ulong.MaxValue) { i++; }
            else { i = 0; };
            Clipboard.SetDataObject(this.i.ToString(), true);
        }
    }
程序的作用是记录程序运行的毫秒数,放在剪贴板中。
比如说运行了1000毫秒时在随便哪个文本中点“粘贴”,应该是粘贴上“1000”。
但是程序运行不起来,直接报异常……
大家帮我看看,我的代码有错吗?

解决方案 »

  1.   


    this.timer1.Interval = 1;这个是1ms吧,你应该把异常贴出来~~
      

  2.   

    System.Windows.Forms.Timer?
    LZ你是想“程序的作用是记录程序运行的毫秒数,放在剪贴板中。”,而你是想每1毫秒i++,但是根据MSDN文档的说法,System.Windows.Forms.Timer只能够提供55ms的精度。
    我建议你用System.TimeSpan,省得你的Timer在那里不断的tick了:
            System.DateTime startTime;
            System.DateTime endTime;
            System.TimeSpan ts;
            myFunc()
            {
                // 程序运行前
                  startTime = System.DateTime.Now;
                // ....
                // 程序结束
                  endTime = System.DateTime.Now;
                ts = endTime - startTime;
                System.Windows.Forms.Clipboard.SetDataObject(ts.TotalMilliseconds.ToString(), true);
            }
    另:我运行LZ的代码几次,没出现错误的情况,就是时间非常不准。
      

  3.   

    看看MSDN,是这样的
    “对象必须是可序列化的,这样才能放在剪贴板中。如果将不可序列化的对象传递给此方法,该方法将失败,但不会引发异常。”
      

  4.   

    楼主的程序错误不是很明显吗?你那个程序永远结束不了,一直在无限循环执行中,你随便选个时间点粘贴,不出问题才怪。看这段判断,你有可能结束吗:
    if (i < ulong.MaxValue) { i++; }
                else { i = 0; };
    但i到了最大值后,又被你赋值为0,重新开始i++了。另外你的timer1什么时候会停下来,你不让它停下来,别想同时操作剪贴板。如果timer1的时间间隔太短,两次timer1发起的线程操作会同时写一个剪贴板,导致访问冲突。
      

  5.   

    访问我的博客 程序员日记 http://www.ideaext.com