Winform 模式等待窗体的问题 winform线程 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 异步调用,BeginInvoke后showdailog等待窗体来阻塞主线程,等耗时的操作完成后,再close掉,注意下跨线程操作窗体就行了,可以用委托搞定。大致思路就这样,Click事件代码btnClick{ OnWaitingLoginValidingHandle handle = new OnWaitingLoginValidingHandle( DoLogin ); handle.BeginInvoke( loginCode , password , license , out message , new AsyncCallback( WaitingLoginValidingCallback ) , "" ); WaitFlashForm.ShowFlash("正在登录,请稍后..." );//这里是自己封的一个等待窗口}private delegate bool OnWaitingLoginValidingHandle( string loginCode , string password , string license , out string message );private delegate void OnCloseFlashForm();private void CloseFlashForm(){具体代码略}private delegate void OnShowMessageBoxHandle(string message );private void ShowMessageBox(string message){ MessageBox.Show( "登录失败:" + message );}private void WaitingLoginValidingCallback( IAsyncResult result ){ OnWaitingLoginValidingHandle handle = (OnWaitingLoginValidingHandle)( (System.Runtime.Remoting.Messaging.AsyncResult)result ).AsyncDelegate; string message = ""; bool loginSuccessful = handle.EndInvoke( out message , result ); if ( result.IsCompleted ) { this.Invoke( new OnCloseFlashForm( CloseFlashForm ) ); if ( !loginSuccessful ) { this.Invoke( new OnShowMessageBoxHandle( ShowMessageBox ) , message ); return; } this.DialogResult = System.Windows.Forms.DialogResult.OK; }}private bool DoLogin( string loginCode , string password , string license , out string message ){ 具体的处理代码,略} http://download.csdn.net/detail/caozhy/4832657 版主的案例应该不错,以前学习过。提一点吧,其实简单的方法也能满足你的要求:创建一个新的窗体加载进度条,后台开始时显示新窗体,旧窗体的Enable属性设置为false,后台处理结束后关闭新窗体,恢复旧窗体的Enable属性。很简单吧。呵呵 如何在c#中获取数据库行数 Timeout 时间已到。在操作完成之前超时时间已过或服务器未响应。 怎么样得到当前添加的新记录的自动增量ID号? 新手请教,C#三层结构到底是怎么一回事啊?先谢谢 winform 这个界面是用什么做的 一个数据库棘手的问题 如何将TextBox绑定到数据源? 问个简单的问题,谢谢大家 win xp 能装sql server 2000吗?我为什么不能装服务器端组件? 如何用程序实现键盘和鼠标的模拟? 关于占位符 请问有什么办法能将汉字替换成空?
Click事件代码
btnClick{
OnWaitingLoginValidingHandle handle = new OnWaitingLoginValidingHandle( DoLogin );
handle.BeginInvoke( loginCode , password , license , out message , new AsyncCallback( WaitingLoginValidingCallback ) , "" );
WaitFlashForm.ShowFlash("正在登录,请稍后..." );//这里是自己封的一个等待窗口
}
private delegate bool OnWaitingLoginValidingHandle( string loginCode , string password , string license , out string message );
private delegate void OnCloseFlashForm();
private void CloseFlashForm(){
具体代码略
}
private delegate void OnShowMessageBoxHandle(string message );
private void ShowMessageBox(string message)
{
MessageBox.Show( "登录失败:" + message );
}
private void WaitingLoginValidingCallback( IAsyncResult result )
{
OnWaitingLoginValidingHandle handle = (OnWaitingLoginValidingHandle)( (System.Runtime.Remoting.Messaging.AsyncResult)result ).AsyncDelegate;
string message = "";
bool loginSuccessful = handle.EndInvoke( out message , result );
if ( result.IsCompleted )
{
this.Invoke( new OnCloseFlashForm( CloseFlashForm ) );
if ( !loginSuccessful )
{
this.Invoke( new OnShowMessageBoxHandle( ShowMessageBox ) , message );
return;
}
this.DialogResult = System.Windows.Forms.DialogResult.OK;
}
}private bool DoLogin( string loginCode , string password , string license , out string message )
{
具体的处理代码,略
}
提一点吧,其实简单的方法也能满足你的要求:创建一个新的窗体加载进度条,后台开始时显示新窗体,旧窗体的Enable属性设置为false,后台处理结束后关闭新窗体,恢复旧窗体的Enable属性。
很简单吧。呵呵