发送消息和发布消息(纯Windows编程方面)之间的区别是什么以及它们与C#,WPF和Pure Windows编程有何关系?
我是新线程和所有相关的东西所以请原谅我明显的问题.我需要挖掘线程的外部..请让我知道帮助我从win32编程到WPF构建我的概念的链接.
我需要理解从Post消息到Afx(调用以启动一个新线程)将Invok/Begin Invoke委托给Dispatcher.
我来给你一个背景.
我们有一个应用程序(中等大小),它在各个地方(数百个)使用MessageBox.Show(....).
这些消息框是工作流程的一部分,用于通知,警告或从用户获取输入.如果没有活动,应用程序应该在一定时间后自动注销.我们要求在注销应用程序时,只是为了清理会话数据,清除视图并隐藏自身,以便在下次启动时,它不必执行启动过程,这在时间上是昂贵的.
一切正常,但是在屏幕上有一些消息框并且用户离开机器而没有响应消息框然后由于没有活动使应用程序退出的情况下.问题是消息框不会消失.
如何在隐藏应用程序时关闭打开的消息框(如果有的话)?
我目前正在C#中开发一个应用程序,我在其中显示一个MessageBox.如何在几秒钟后自动关闭消息框?
我必须坚持不懈地寻找,因为这是我无法解决的另一个看似常见的问题.
这是我的问题 - 我正在使用WPF和MVVM,并且我有一个在模型中执行的状态机.如果发生错误,我需要将信息传递给ViewModel以显示错误.这部分似乎工作正常.当用户单击所需行为时,模型中的代码将继续,并查看用户与之交互的对象以确定下一步操作.
问题是模型需要重新加载文件,该文件用所述文件的内容更新GUI.因为模型在一个线程中执行,你可以想象我接下来要问的问题 - 你到底该如何正确地与GUI同步?在MFC中,我会使用SendMessage或PostMessage来完成GUI更新.
我读过WinForms的文章,建议使用InvokeRequired在必要时自动调用BeginInvoke.我实际上不知道BeginInvoke会完成我想要的东西,所以我被鼓励学习这个.
我如何从我的模型中实际调用BeginInvoke?这种方法甚至适用于WPF吗? 我继续并实现了一个委托,然后调用了Invoke,但我得到了同样的错误,告诉我无法从该线程修改集合.我也尝试过BeginInvoke,但是我认为它也行不通,因为它无论如何都会从另一个线程启动.
困惑.如果我错过了一些关于互联网的非常明显的内容,请继续给我一个口头抨击,我可能应得的.
编辑 - 我应该补充一点,我正在寻找除定时器或基于BackgroundWorker的解决方案以外的东西,除非这是在WPF/MVVM中解决这个问题的唯一方法.另外,我想知道是否有任何MVVM工具包已经有了这类工具的设施......
我的System.Threading.Task上没有.Delay定义.
public async Task<string> WaitAsynchronouslyAsync()
{
await Task.Delay(10000);
return "Finished";
}
Run Code Online (Sandbox Code Playgroud) 我在VS2008,C#中使用Addin,我需要显示消息(错误消息和其他).
我不知道消息的长度,因此我想使用Scrollable MessageBox.
我从2007年开始发现这篇文章:Mike Gold 2007年7月30日
现在,2011年还有其他好的组件吗?我想评估一些有关它的组件.
更新:
另一个组件,但更旧:MessageBoxExLib http://www.codeproject.com/KB/dialog/MessageBoxEx.aspx
可自定义的.NET Winforms消息框. http://www.codeproject.com/KB/dialog/Custom_MessageBox.aspx
我们要求关闭子表单作为自动注销的一部分.我们可以通过从计时器线程迭代Application.OpenForms来关闭子表单.我们无法使用Application.OpenForms关闭OpenFileDialog/SaveFileDialog,因为未列出OpenFileDialog.
如何关闭OpenFileDialog和CloseFileDialog?
我的应用程序中有一个确认屏幕,我告诉用户他的项目已成功保存.他可以按OK然后消息框将会消失,但如果他没有,如果没有响应,如何在3秒后消息框消失?
我有这个程序,其中我使用计时器重定向到另一页.它确实有效,但问题是当我点击取消按钮时会出现一个消息框,当用户不点击它并且计时器滴答时,消息框没有关闭.如何自动关闭消息框?
这就是它的样子..
这是我用来重定向页面的代码
DispatcherTimer sessionTimer = new DispatcherTimer();
public CashDepositAccount()
{
InitializeComponent();
con = new SqlConnection(ConfigurationManager.ConnectionStrings["kiosk_dbConnectionString1"].ConnectionString);
con.Open();
SqlCommand cmd1 = new SqlCommand("Select idle From [dbo].[Idle]", con);
idle = Convert.ToInt32(cmd1.ExecuteScalar());
InputManager.Current.PreProcessInput += Activity;
activityTimer = new DispatcherTimer
{
Interval = TimeSpan.FromMinutes(idle),
IsEnabled = true
};
activityTimer.Tick += Inactivity;
}
#region
void Inactivity(object sender, EventArgs e)
{
navigate = "Home";
Application.Current.Properties["navigate"] = navigate;
}
void Activity(object sender, PreProcessInputEventArgs e)
{
activityTimer.Stop();
activityTimer.Start();
}
Run Code Online (Sandbox Code Playgroud)
当Timer定时器重定向到主页面时,如何关闭消息框?
我需要询问 [System.Windows.MessageBox] 的超时问题,代码如下:
\n\n“logX”(如log1、log2或log3)是写入文件的函数,仅更改Log3。Log3 写入后执行“退出”(离开脚本)。我们不需要这个函数如何工作
\n\n#Funcion para comprobar si existe el token o no.\nfunction Token{\n#comprobamos si existe el fichero\n$token = Test-Path $dir_token\nif($token -eq $True){\n #Existe el fichero\n $ftoken = 1\n}else{ \n #No existe el fichero\n $ftoken = 0\n}\nreturn $ftoken\n}\n\n#Asignamos direcci\xc3\xb3n de token\n$Global:dir_token = "D:\\Nuevacarpeta\\Nueva carpeta\\token.txt"\n#Ejecutamos la funcion de Token para saber si existe ahora mismo\n$ftoken = Token\n#Preparamos la ruta del log\n$log = "D:\\Nuevacarpeta\\log\\log.txt"\n\n#Creamos la variable Outlook transformandolo en un objeto (Commobject de Powershell)\n$Global:outlook = New-Object -comobject outlook.application\n$comprobaroutlook = …
Run Code Online (Sandbox Code Playgroud) c# ×8
messagebox ×6
wpf ×3
.net ×2
winforms ×2
add-in ×1
auto-close ×1
mvvm ×1
popup ×1
powershell ×1
scroll ×1
timeout ×1
timer ×1
winapi ×1
windows ×1