在设计一个好的Web GUI时,我们对最终用户的期望是什么?
我想出了以下内容,但我想知道是否还有其他可以暗示的内容......
这个问题背后的原因更多的是"来自地狱的用户界面".例如,我遇到过检查记录旁边的复选框的页面,将通过ajax直接删除它.对我来说,这似乎是错误的,复选框是一个切换 - 删除操作肯定不是!
我正在编写一个库(c#.net 4.0),用于许多应用程序.其中一个要求是库会根据应用程序是否已部署并通过clickonce运行而向调用返回稍有不同的结果.
我已经进行了搜索,但无法找到程序集可以确定"托管"应用程序是否部署了clickonce的任何方式.
任何指针将不胜感激.
我希望在这里获得一些集体经验,那么您在数据库设计中总是包含什么(如果有的话)实用程序表或公共字段?
一个例子是我总是包含一个App_Errors表来存储任何未捕获的异常信息,以及一个App_Audit存储所有编辑信息的表.
我(在我自己的脑海中)提出了包括RecordCreatedDate和RecordLastEditedDate在每个数据表上的好处,但没有得出关于信息是否真的有用的任何结论.
提出更多方向的问题 - 我目前的重点是全球可访问的Web应用程序(想想社交网络).
TA!
我正在尝试找到一种方法将Web当前的http上下文传递给服务类(或者通过引用它来初始化类).我这样做是为了抽象应用程序的其余部分,而不是需要了解有关http上下文的任何信息.
我也希望使用TDD测试服务,可能使用其中一个Mockable框架.因此,最好使用接口而不是实际的类.
我想要实现的一个例子:
class WebInstanceService
{
private IHttpContext _Context;
public WebInstanceService( ... , IHttpContext HttpContext )
{
....
_Context = HttpContext;
}
// Methods...
public string GetInstanceVariable(string VariableName)
{
return _Context.Current.Session[VariableName];
}
}
Run Code Online (Sandbox Code Playgroud)
我遇到的一个主要问题是没有IHttpContext,.net http上下文是一个抽象类的子类,不能被模拟(很容易?).
另一个问题是我无法初始化类的全局实例,因为上下文与大多数请求无关.
我可以使类静态,并要求将Context传递给每个函数,因为它被称为ie
public static string GetInstanceVariable(string VariableName, HttpContext Context)
{ ... }
Run Code Online (Sandbox Code Playgroud)
但是这并没有使类更容易测试,我仍然需要创建一个HttpContext,另外任何想要使用这个类的非Web感知服务突然需要能够检索上下文,要求它们紧密耦合到Web服务器 - 首先想要创建这个类的全部原因.
我对所有建议持开放态度 - 特别是那些人们知道的便于进行tdd测试的建议.人们会怎么建议我解决这个问题?
干杯
当从主程序窗口生成的模式对话框正常关闭时,我的应用程序意外结束。不会引发未处理的异常,并且不会在主应用程序窗口上触发任何Closing或事件。Closed
本质上,我有一个主/外壳窗口,它是使用 ShellWindow.Show() 在应用程序代码中启动的。通过菜单,用户可以生成一个自定义打开对话框,这是一个创建的新窗口,然后使用 ShowDialog 显示(窗口所有者设置为 shell 窗口的所有者)。
当对话框关闭时(在内部,通过调用 _modalDialogWindow.Close() 的命令),应用程序将关闭,而我只期望模式对话框已关闭。
调试代码表明 ShellWindow 已从内存中转储,因为 _modalDialogWindow.Close() 之后执行的下一行代码是静态程序代码中的 Application.Run() 之外的代码。
如果有人有任何想法,我愿意尝试任何事情。
我试图让我的GUI线程在长时间运行操作期间保持响应.这些操作必须是同步的,因为它们通常是在请求的操作完成之前需要完成的操作.
我试图用后台工作人员,监视器和锁定对象来做这件事.本质上我想在长时间运行的进程启动之前启动一个计时器,在后台线程中启动长时间运行的进程,并等待后台工作线程表示它已经完成,然后再继续使用相关代码.如果长时间运行的过程花费的时间过长,则向用户显示"加载..."对话框,以便他们知道应用程序没有崩溃.
一个例子可能是图形包中的用户点击按钮,在我们可以绘制图像然后打印pi计算到顶部的一百万个小数位之前,必须从磁盘加载大图像.
我无法从磁盘异步加载图像,这将使UI保持响应,因为用户可以启动另一个操作,这会扰乱程序状态(即撤消操作).
我可以简单地将光标更改为沙漏并完成它,但在许多情况下我希望用户也可以取消操作 - 带有取消按钮的"正在加载..."对话会照顾这很好.
我最初的目标是使用一个锁对象,System.Threading.Monitor.Enter()以便UI线程等待长时间运行的线程完成,然后继续执行.如果计时器在长时间运行的线程完成之前触发,则UI线程仍可用于处理事件并在屏幕上绘制对话框.
我遇到的问题是,在UI线程尝试获取锁定之前,我无法让后台工作程序锁定对象.
相反,我正在使用一些非常黑盒子的第三方代码进行处理.因此,我不能将代码定制为线程友好的并报告其进度或支持取消.
我的问题
是否有任何经过验证的方式包装第三方代码,以便UI线程保持响应,如果需要,我可以显示取消对话? - 将会有许多实例,其中长时间运行的操作几乎立即完成,并且不需要显示对话框.
更进一步的澄清
我为什么要这样做?异步操作是Windows应用程序的宠儿......
好吧,我不想在启动长时间运行异步操作时锁定用户界面的每个方面,然后在完成后解锁每个方面.我可以 - 通过设置光标或物理禁用所有的删除等等,但实际上我更愿意能够简单地将调用包装在'某些对象/方法等'中,这将允许弹出一个对话框(如果仅当)操作花费足够长的时间才能影响用户.我不必担心执行流程的变化,我仍然(总体上)能够在代码中维护原子操作(不会在回调中分开)并且仍然具有"响应"UI.
我可以理解为什么到目前为止我在将BackgroundWorker/Thread制作成同步阻塞线程方面没有成功,但我确实担心我不得不while(true){ sleep() }在GUI线程中沿着路线走,而不是使用锁.
我知道从控制台窗口运行WPF应用程序并输出到控制台而不是显示gui(又名本问题)存在问题.
该问题的"结论"(似乎已经得到很好的研究和提出)是可以从应用程序输出到控制台,但它会立即返回 - 而不是像控制台应用程序那样阻塞.
但是,查看Visual Studio特别是'devenv.exe'进程,这正是它所做的事情:
devenv.exe<enter> 运行Gui立即返回控制台 devenv.exe /?<enter> 在控制台中显示帮助,仅在显示所有输出后返回.devenv.exe test.txt<enter> 运行Gui(加载test.txt)立即返回控制台因此,必须有可能以某种方式在我们自己的应用程序中出现这种行为!有谁知道怎么样?
.net ×3
c# ×3
wpf ×2
asp.net-mvc ×1
clickonce ×1
console ×1
locking ×1
mocking ×1
modal-dialog ×1
tdd ×1