我想确保以下过程很好,因为我缺乏WPF应用程序的经验。我做了一些研究,但没有看到任何符合我要求的研究,特别是对于单站的多用户。
问题:我有一个应用程序需要切换用户而不关闭。完成此任务的最佳选择是什么?
舞台:我正在使用MongoDb数据库,C#WPF,自定义身份验证。它是一个单独的屏幕,其他窗口用于管理任务。
身份验证有两个选项。首先是遵循行业惯例的普通用户名和盐渍密码。我提到的第二个是一个简短的登录代码,其存储方式与密码相同(IE是一个用户名和密码)。这是因为它是一个非常繁忙的地方,目前的要求是它快速超时,比如5秒,所以其他人不能在别人的凭据下输入信息。一次最多8个人需要能够快速登录并添加一些信息。环境是一个高员工盗窃的地方。
我的解决方案:这包括上述身份验证。登录后,信息将加载到ApplicationState公共静态对象中,该对象具有属性与屏幕上某些对象之间的绑定,示例显示登录的用户。发出命令时,将检查加载到ApplicationState中的权限。验证是否存在足够的权限。计时器在另一个线程上,如:http://www.codeproject.com/Articles/42884/Implementation-of-Auto-Logoff-Based-on-User-Inacti
评论:我花了一天时间研究和设计此解决方案。我找不到任何有我要求的人。由于我缺乏WPF和C#的经验,我不确定在搜索和研究中使用的词汇。另一种选择是在每次登录时重建MasterWindow,但这似乎是一个坏主意。有没有其他方法来实现这一点还是这样就足够了?我还没有完成编码,但我的测试工作正常。
答案 0 :(得分:0)
你在这里提出一个相当广泛的问题,涉及许多设计决策,这些决定不一定相互依赖。在这里给出一个“正确”的答案有点困难,所以只是一些想法:
使用WPF时,深入挖掘MVVM模式真的很有意义。您在研究WPF时可能已经听说过它。 (如果你已经使用它,不要紧,)。有一点学习曲线,但它可以让你摆脱不少设计决策。在您的情况下,拥有一个暴露用户相关属性的ViewModel(用户名,登录等命令等)可以让您轻松处理帐户切换,而无需担心视图被更新或类似的情况。 WPF绑定机制将为您做到这一点。如果你还没有对MVVM和INotifyPropertyChanged做一些研究。
使用全局钩子跟踪用户操作对我来说似乎有些过分。我会考虑重置影响ViewModel的任何用户操作的超时(添加数据,删除数据等)。如果这还不够,那么在使用全局操作系统级挂钩之前,我会在应用程序窗口中处理事件。您可以订阅窗口的MouseMove
事件并在那里重置超时计时器。应该这样做,因为根据我的要求,您的应用程序之外不会发生任何事情。全局钩子通常涉及很多P/Invoke
,如果可能的话应该避免使用。
除此之外,就我所知,你的方法似乎是合理的......虽然这不是一个详尽的答案,但我希望它能为你提供下一步的一些意见。