0

我正在构建一个 vb.net/wpf 应用程序,它是一系列 wpf 窗口。我想在每次打开或关闭新窗口或用户按下按钮时记录时间戳。我正在尝试找到一种解决方案,如何记录事件相对于程序开始发生的时间。我不确定如何创建某种“全局”秒表并从不同的窗口访问它以要求记录时间戳。应该是什么方法?

4

2 回答 2

1

使单个对象负责打开窗户。例如,这可能是 Program 类或 Wizard 类(这对我来说听起来像是一种向导式的 UI)

当向导类打开每个窗口并通过调用等待它关闭时ShowDialog

如果您这样做,则为窗户的打开和关闭加上时间戳并不难。

单击按钮时的时间戳记录可以通过使单个对象负责记录并将该对象传递给需要记录的函数来完成。

这很容易污染方法的签名。

有几种方法可以解决这个问题,但大多数方法会创建一个不需要传递的单个众所周知的对象(静态类)。

使用能够基于所需接口解决对象请求的容器可能会更好。温莎城堡可能是一个选择

//application starts...
var container = new WindsorContainer();

// adds and configures all components using WindsorInstallers from executing assembly
container.Install(FromAssembly.This());

// instantiate and configure root component and all its dependencies and their dependencies and...
var logger= container.Resolve<ILog>();
logger.Log("Click!");

// clean up, application exits
container.Dispose();
于 2013-05-12T06:52:33.293 回答
0

我最终做了以下事情。它包括静态类,我将一个对象(字典)从一个窗口传递到另一个窗口。我不确定这是否是正确的方法,但窗口相互激活并在下一个窗口被称为 showdialog 后关闭。谢谢您的帮助。

Public Class HelpTools
Shared startKey As String = "start_time"
Public Shared Sub initializeData(ByRef data As Dictionary(Of String, String), ByVal id As String, ByVal startTime As DateTime, ByVal firstTimeStamp As Double)

    AddStringOutput(data, "id", id)

    Dim start As String = startTime
    AddStringOutput(data, startKey, start)

    AddStringOutput(data, "next_timestamp", firstTimeStamp)



End Sub

Public Shared Sub recordTime(ByRef data As Dictionary(Of String, String), ByVal info As String)


    'Set the StartTime at the begin of the processing
    ' for which you want to capture ElapsedTime
    Dim StartTime As DateTime = DateTime.Parse(getStringOutput(data, startKey)) 'Now


    'Capture the Elapsed Time here as follows
    Dim ElapsedTime As TimeSpan = Now().Subtract(StartTime)
    'Now we will report the output
    'display format is Hours:Minutes:Seconds
    Dim timestamp As String = String.Format(info & ": elapsed Time : {0:00}:{1:00}:{2:00}", CInt(ElapsedTime.TotalHours), _
    CInt(ElapsedTime.TotalMinutes) Mod 60, _
    CInt(ElapsedTime.TotalSeconds) Mod 60)

    Dim nextTimestampNumber As Integer = getDoubleOutput(data, "next_timestamp")
    AddStringOutput(data, "timestamp_" & nextTimestampNumber, timestamp)
    AddDoubleOutput(data, "next_timestamp", 1)

End Sub

...
end class
于 2013-05-13T07:35:53.437 回答