Delay

Public Sub Delay(ByRef HowLong As Double)
        On Error Resume Next
        Dim throughTime As DateTime
        Dim Dnow As DateTime = DateTime.Now
        'throughTime = DateAdd(DateInterval.Second, HowLong, Now)
        throughTime = Dnow.AddSeconds(HowLong)
        Do While throughTime > DateTime.Now
            Application.DoEvents()
        Loop
    End Sub
转写为C#如下,却出现了问题:
public void Delay(ref double HowLong)

  {
   DateTime throughTime;
   DateTime Dnow = DateTime.Now;
   throughTime = Dnow.AddSeconds(HowLong);
   while (throughTime > DateTime.Now)
   {
    Application.DoEvents();
   }
  }


错误1
与“Delay(ref double HowLong)”最匹配的重载方法具有一些无效参数
错误2
参数“1“无法从”int"转换为"ref double"

请教大家。我对C#不太懂,请问要如何修改?

public void Delay(double HowLong) 就好,不需要用 ref

胡国宏的看法:

错误1
与“Delay(ref double HowLong)”最匹配的重载方法具有一些无效参数
错误2
参数“1“无法从”int"转换为"ref double"

上面的两个错误其实是一个错误,因为你的调用写的是:

Delay(20)

而编译器将20解释为int类型,运行时自然会去查找

Delay(int HowLong)函数,而你仅仅定义了
Delay(ref double HowLong)函数

当无法将 int 类型隐式转换为ref double就会出现上面的错误。
vb之所以没有出错,是因为编译器选项默认设置是: option strict == off

正确的作法是按下面的方式调用:

Delay((double)20);


Delay((double)20);

我测试了一下,编译有误。
我分析原因是:编译器将参数(double)20解释为右值(rvalue),
而ref定义的参数必须是左值,lvalue。所以出错。
另外一个原因是double类型无法隐式转换为ref double.

可以采用以下方法:

方法一、如8620(tuenhai)所说,更改public void Delay(ref double HowLong),
    定义为public void Delay(double HowLong)

方法二、不更改定义,更改调用方式

     double HowLong = 20;
   
     this.Delay(ref HowLong );



public void Delay(int m)
{
  DateTime endTime = DateTime.Now.AddMilliseconds((double)m);
  while (endTime > DateTime.Now)
  {
  Application.DoEvents();
  }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值