0

该项目针对.net 2.0。我正在使用以下方法在新线程中实例化一个方法:

myThread = New Threading.Thread(AddressOf myClass.MyMethod)
myThread.Start()

子是这样的:

Sub myMethod()
  Dim fs As New IO.FileInfo(sFile)
  While Not DateDiff(DateInterval.Second,
                     dtCurrentTime, Now()) > iTimeOutInSeconds
    fs.Refresh()
    If fs.Exists Then
      fs.Refresh()
      If fs.Length > 0 AndAlso fs.Length = iGrowing Then
        bFileExists = True
        Exit While
      End If
      iGrowing = fs.Length
      System.Threading.Thread.Sleep(1000)
    End If
  End While
End Sub

我正在等到文件停止增长。问题是如果我从主线程调用它,例如:

Call myClass.MyMethod()

它工作正常,消耗的处理器功率很少。但是,如果我在一个单独的线程中调用它,则会消耗一台核心机器中的所有处理器功率,或多核机器中的一个核心。任何人都知道在不超过处理器的情况下进行“延迟”的另一种方法?

4

1 回答 1

1

你有这个代码:

While Not (...)
    If fs.Exists Then
        ' do stuff
        Thread.Sleep(...)
    End If
End While

所以如果文件不存在,就没有睡眠。

我不能说为什么在主线程上的行为与在后台线程上的行为不同。你确定这就是正在发生的事情吗?

于 2013-08-20T12:59:59.640 回答