Я пытаюсь создать приложение UWP, которое измеряет время, которое человек смотрел на несколько объектов.Есть около 300 объектов, и все они должны измерить время и отобразить его в текстовом файле.Я успешно закодировал это только для одного объекта, но я не знаю, как я могу сделать это с несколькими объектами.Я видел этот пост Как более эффективно создавать 300 секундомеров в C #? , и ответ на этот вопрос мне очень помог, но код не очень хорошо работает с моим кодом.Поэтому мне нравится идея создания списка объектов, а затем, когда человек смотрит на объект [o], соответствующий секундомер запускается, когда глаза вошли в объект, и останавливается, когда глаза покидают объект.Проблема, как я уже упоминал, решение не работает с кодом, с которым я работаю.Это код, который я использовал, который работает только для одного элемента.
public sealed partial class BlankPage1 : Page
{
private GazeElement gazeButtonControl;
private GazePointer gazePointer;
public BlankPage1()
{
this.InitializeComponent();
Stopwatch Timer = new Stopwatch();
gazePointer = GazeInput.GetGazePointer(null);
gazeButtonControl = GazeInput.GetGazeElement(GazeBlock);
gazeButtonControl = new GazeElement();
GazeInput.SetGazeElement(GazeBlock, gazeButtonControl);
gazeButtonControl.StateChanged += GazeButtonControl_StateChanged;
void GazeButtonControl_StateChanged(object sender, StateChangedEventArgs ea)
{
if (ea.PointerState == PointerState.Enter)
{
Timer.Start();
}
if (ea.PointerState == PointerState.Exit)
{
Timer.Stop();
CreateStatistics();
}
}
void CreateStatistics()
{
File.WriteAllText(@"C:\Users\Vincent Korpelshoek\AppData\Local\Packages\app.a264e06e2-5084-4424-80a9-bee5f5fbb6b6_8wekyb3d8bbwe\LocalState\Resultaten.txt", Timer.Elapsed.ToString(););
}
}
}
«GazeBlock» - это имя первого объекта, который был создан в файле XAML.Короче говоря, я бы хотел реализовать это решение:
static Dictionary<object, Stopwatch> stopwatchesByObject;
static void Main(string[] args)
{
List<object> objects = new List<object>();
// now you have to fill the objects list...
stopwatchesByObject = new Dictionary<object, Stopwatch>();
foreach (var o in objects)
{
stopwatchesByObject.Add(o, new Stopwatch());
}
}
// Call this method when the user starts gazing at object o
static void StartGazingAt(object o)
{
stopwatchesByObject[o].Start();
}
// Call this method when the user stops gazing at object o
static void StopGazingAt(object o)
{
stopwatchesByObject[o].Stop();
}
static void CreateStatistics()
{
StringBuilder sb = new StringBuilder();
foreach (var entry in stopwatchesByObject)
{
sb.AppendLine($"Gazed at {entry.Key.ToString()} for {entry.Value.Elapsed.TotalSeconds} seconds.");
}
File.WriteAllText("c:\\temp\\statictics.txt", sb.ToString());
}
Но я не знаю, как «объединить» эти два элемента вместе, чтобы решение работало не только для одного объекта, но и для всего300 из них.Если кто-нибудь знает, как помочь мне сделать эту работу, спасибо!
Винсент