Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何将用户交互封装在单个方法中

如何将用户交互封装在单个方法中
EN

Stack Overflow用户
提问于 2012-01-04 02:40:41
回答 1查看 133关注 0票数 2

我使用的是一个外部框架,它用一个方法定义了一个接口:

代码语言:javascript
运行
AI代码解释
复制
bool Authenticate();

即包含身份验证的整个过程,包括用户交互(WinForms)。我想做的是:

代码语言:javascript
运行
AI代码解释
复制
bool Authenticate()
{
  bool succeeded = false;
  bool userCancelled = false;
  while(!succeeded && !userCancelled)
  {
     var credentials = AskTheUserForCredentials(); // this needs to wait for user input before returning!
     if (credentials == null) 
       userCancelled = true;
     else
       succeeded = AuthenticateWithAnExternalServer(credentials);

     if (!succeeded)
       ShowErrorMessage();
  }
  return succeeded;
}

现在,实现AskTheUserForCredentials()ShowErrorMessage()的简单方法是在内部使用Form.ShowDialog()。这是非常糟糕的用户体验,因为对话框消失了,因为实际的身份验证过程和错误信息出现在一个新的,有点击关闭对话框。

我希望所有这些都在一个单一的表单中,该表单保持可见,适当地禁用文本框/按钮,并自动显示错误消息。

您将如何在这个单一的,阻塞的方法调用?

更新

到目前为止,最好的解决方案是在AskTheUserForCredentials()中实现一个消息泵。

代码语言:javascript
运行
AI代码解释
复制
Credentials AskTheUserForCredentials()
{
   while(NeitherOkNorCancelPressed())
   {
      Application.DoEvents();
      Thread.Sleep(10); // Standard Sleep(0) results in 100% procesor core usage.
   }
   return CreateCredentialsFromTextboxesEtc();
}

现在我们都知道信息泵还很不干净。

这个解决方案到底有多糟?

还有更好的吗?

更新2

消息泵有一些缺陷:

cpu-effective

  • working

  • 长得很丑,也不完全像白人UIAutomation

那样慢吞吞

最后,我将整个过程委托给一个对话框为ChrisBD (对话只有在最终成功或失败之后才会关闭)。使用IoC将身份验证从GUI中抽象出来需要花费更多的时间,但最终是干净的,并按预期工作。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-01-04 02:51:42

我想你快到了。

显示一个模态对话框,该对话框具有用户输入控件,并在需要时让该对话框调用验证方法。

然后,您可以选择对话框何时关闭,以及是否显示任何错误消息。

使用模态对话框类的属性指示身份验证是否成功。当您关闭对话框类(在主应用程序以模式打开之前实例化它),主应用程序将继续运行-然后您可以通过检查适当的对话框类属性来检查身份验证是否成功。

*在此编辑*

如果您自己实现了身份验证方法,那么调用模态对话框的是这个函数,而不是您的主应用程序(如前所述)。自定义表单类可以运行所有身份验证逻辑,并显示用户交互控件以及任何错误消息。请记住移除“最小化”和“关闭”按钮,并设置类属性以指示身份验证过程的成功或失败。

调用框架将等待身份验证方法的返回值。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8725465

复制
相关文章
与用户交互
引入,计算机的发明是为了奴役计算机,解放劳动力。假设我们现在写了一个ATM系统取代了柜员,如果我们要在这台ATM上取款,那么这个ATM是不是会要求我们输入姓名、密码?是不是需要我们输入需要提款的金额?这就可以理解为一种交互。接下来让我们了解下python是怎么实现交互的。
py3study
2020/01/15
9140
python用户交互
s = input("这里是input:") # input输入. 让用户输入一些内容. 程序会停在这句话. 阻塞.
py3study
2020/01/20
6360
python 用户交互
input是个内建函数,具体用法:接收用户输入的内容,输入的字符串,接收到就是字符串;输入的是数字,接收的就是数字
py3study
2018/08/02
1.1K0
用户交互input
input() 函数 接收到的都是str,如果输入为数字,打印结果想进行运算,此时需要转义. 语法: 内容=input("提示信息") 这里可以直接获取到用户输入的内容.
py3study
2020/01/19
7380
matplotlib 用户交互
本篇代码由matplotlib 官方example修改升级而来。实现了点击legend可以隐藏/显现 曲线,点击曲线可以改变颜色,点击标题可以改变标题,以及键盘事件也可改变标题。
用户6021899
2020/02/14
9330
如何将py单个文件及py工程生成exe?
本文介绍了如何将Python脚本打包成可执行文件,以便于发布和使用。首先介绍了使用pyinstaller进行打包单个文件的方法,然后介绍了如何打包整个Python工程。最后给出了示例代码和说明。
企鹅号小编
2018/01/03
1.1K0
如何将py单个文件及py工程生成exe?
shell脚本用户交互
学会了输出,那么输出什么呢?当然是人类让计算机运算的数据,那么运算的数据来自哪里?
星哥玩云
2022/09/15
1.1K0
shell脚本用户交互
在 Ubuntu 中如何将用户添加到 Sudoers
sudo是一个命令行程序,它允许被信任的用户以 root 或者其他用户身份去运行命令。
雪梦科技
2020/05/09
34.6K0
在 Ubuntu 中如何将用户添加到 Sudoers
在 Debian 中如何将用户添加到 Sudoers
sudo是一个命令行工具,它允许被信任用户以另外一个用户身份运行命令,默认是 root 用户。
雪梦科技
2020/05/11
12.6K0
在 Debian 中如何将用户添加到 Sudoers
谈谈用户交互设计
交互设计(Interaction Design)这一概念,最初是由IDEO创始人之一Bill.Moggridge(莫格里奇)1984年在一次会议上提出。他设计了世界上第一台笔记本电脑Compass,并写作出版了在交互设计领域影响深远的《Designing Interactions》一书,被称为交互设计之父。
netkiller old
2022/12/01
6250
致ClickHouse用户的一封信
感谢您在百忙之中抽出时间来阅读此信。虽然未曾谋面,但我们关注您已经有很长一段时间了。
小晨说数据
2022/03/09
8710
致ClickHouse用户的一封信
StarRocks配置用户属性,设置单个用户的最大连接数
Error when connecting to server: 1064 Reach limit of connections(FE的连接数达到了上限)
AiDBA宝典
2023/08/09
2.3K0
StarRocks配置用户属性,设置单个用户的最大连接数
oracle如何修改单个用户密码永不过期
      Oracle的密码过期规则是用Profile来管理的,系统默认只有一个Profile(DEFAULT),该profile的密码过期规则为180天;而所有的用户都使用该DEFAULT的profile,所以如果修改DEFAULT的过期规则会影响所有的用户。如果你想修改某个用户的密码让其永不过期,则需要新建一个profile,修改该profile的过期规则为无限期,这样该用户的过期规则会改变,并且不会影响到其他用户。
孙杰
2019/10/29
3K0
如何响应用户交互事件
指针事件表示用户交互的原始触摸数据,如手指接触屏幕 PointerDownEvent、手指在屏幕上移动 PointerMoveEvent、手指抬起 PointerUpEvent,以及触摸取消 PointerCancleEvent,这与原生系统的底层触摸事件抽象是一致的。
拉维
2019/08/22
2.2K0
如何响应用户交互事件
从Mysql备份中恢复单个表
因为云平台的备份是把库中所有的表都打包成一个 .sql文件,然而这一个.sql文件大约有20G,现阶段的方法是把.sql文件source到数据库数据处理机器上,然后再根据需求提出需要的表。每次这个操作都需要大约2个多小时,太耗时。闲暇时间,Google到了一个大神写的几行代码,经过实验确实很好用。下面就分享出来,仅供参考。 思路(原谅我也理解了好一会儿): 主要使用sed命令来实现,加上-n,-e参数把打印的结果追加到一个文件中,就得到了想要的表的内容。 一般情况下我们使用sed打印指定行的内容是: [ro
行 者
2018/03/26
4.6K0
从Mysql备份中恢复单个表
微信小程序与用户交互
显示Loading提示框,不会自动关闭,需主动调用 wx.hideLoading 才能关闭提示框
小小咸鱼YwY
2020/06/19
1.4K0
前端用户体验设计:创造卓越的用户界面和交互
用户体验(User Experience,UX)是前端开发中至关重要的一环。一个优秀的用户体验能够提高用户满意度、降低用户流失率,并有助于网站或应用的成功。本文将深入讨论前端用户体验设计的关键概念,为您提供一份全面的指南,并提供带有实际代码示例的技巧,以创造卓越的用户界面和交互。
海拥
2023/09/17
7660
[随缘一题]排序数组中的单个元素
因为我发现每日一题太难了,,,总会出现一些加班已经很累了(懒得不想动)的时候,而且周末有事多做两道题都叫做同一天的每日一题也让我这个强迫症贼难受.
呼延十
2019/07/01
2.2K0
一封来自微信用户的投诉信
微信iOS 6.2版本这两天更新后,小派听到一片欢呼。可是,今天小派竟然收到一封用户的投!诉!信!这怎么能忍!?赶紧拆开看看: 用户来信 亲爱的派, 你好。 我关注你很久了,遗憾的是,跟你的第一次互动是这封投诉信。 也许你不会相信,我喜欢一个陌生的女孩子很久很久了。这一年以来,我每天坚持坐8点的那班车,因为这样才可以遇见她。 昨天,车在她那一站停下,我的目光照例穿过重重人影,在车站搜寻她的身影。拥挤的人潮里,她总是不慌不忙的那一个。然而,她并没有如往常一般出现在我的视线里。就在我以为她没搭上我这班公交而
腾讯大讲堂
2018/02/12
1.2K0
一封来自微信用户的投诉信
在CentOS(Linux)中添加单个IP和批量添加多个IP地方法
1、普通方法: 在/etc/sysconfig/network- s/中新建文件ifcfg-eth0-range0
Inkedus
2020/04/16
4.6K0

相似问题

如何将H264封装在RTP中?

16

如何将集合包装在单个父标记中

10

如何将列2和列2封装在循环中?

44

如何将单个和时态事件封装在服务中?

12

如何将方法1封装到方法2?

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文