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”。
但是程序运行不起来,直接报异常……
大家帮我看看,我的代码有错吗?
this.timer1.Interval = 1;这个是1ms吧,你应该把异常贴出来~~
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的代码几次,没出现错误的情况,就是时间非常不准。
“对象必须是可序列化的,这样才能放在剪贴板中。如果将不可序列化的对象传递给此方法,该方法将失败,但不会引发异常。”
if (i < ulong.MaxValue) { i++; }
else { i = 0; };
但i到了最大值后,又被你赋值为0,重新开始i++了。另外你的timer1什么时候会停下来,你不让它停下来,别想同时操作剪贴板。如果timer1的时间间隔太短,两次timer1发起的线程操作会同时写一个剪贴板,导致访问冲突。