我现在做一个登录窗体,点击登录按钮后执行下面动作:
1、更新本地数据库。
2、打开主窗体,并关掉登录窗体。因为执行时间有点长,我想加入一个进度条。
小弟对多线程编程一知半解,在BackgroudWorker的DoWork事件里,如何计算动作执行完成的百分比呢?如何得到窗体的Show方法所用的时间呢?虚心向各位高手请教,谢谢!
1、更新本地数据库。
2、打开主窗体,并关掉登录窗体。因为执行时间有点长,我想加入一个进度条。
小弟对多线程编程一知半解,在BackgroudWorker的DoWork事件里,如何计算动作执行完成的百分比呢?如何得到窗体的Show方法所用的时间呢?虚心向各位高手请教,谢谢!
解决方案 »
- C#数据库大量数据比对
- 大家好,怎么把集合绑定到dataGridView上
- 调试能运行,安装不能运行。请高手解答
- NET的WIN程序如何能一次导入100万数据到SQL数据库中?
- 求 开源的 UML 绘制工具。或开源的C#的矢量图绘制工具,哪怕是一点点代码也好,可以放大/缩小/拖动 所绘的矢量图的
- 如何实现代码的调试
- C#直接打印一个html页面
- 请各位看看这个棘手问题.(也是一个神奇的问题)关于vc写的ATL主件在C#中的使用
- 正则表达式简单问题:要求字符中至少有一个数字、一个大写字母和一个小写字母的正则表达式怎么写?
- 100分求介绍c#的好网站!!!快来抢分喽!
- 关于溢出处理的问题
- 存储过程参数:发送0的时候为何无效?
public interface ISplashForm
{
void SetStatusInfo(string NewStatusInfo);
} public class Splasher
{
private static Form m_SplashForm = null;
private static ISplashForm m_SplashInterface = null;
private static Thread m_SplashThread = null;
private static string m_TempStatus = string.Empty; /// <summary>
/// 显示过渡窗口
/// </summary>
public static void Show(Type splashFormType)
{
if (m_SplashThread != null)
return;
if (splashFormType == null)
{
throw (new Exception("splashFormType is null"));
} m_SplashThread = new Thread(new ThreadStart(delegate()
{
CreateInstance(splashFormType);
Application.Run(m_SplashForm);
})); m_SplashThread.IsBackground = true;
m_SplashThread.SetApartmentState(ApartmentState.STA);
m_SplashThread.Start();
} /// <summary>
/// 设置载入状态
/// </summary>
public static string Status
{
set
{
if (m_SplashInterface == null || m_SplashForm == null)
{
m_TempStatus = value;
return;
}
m_SplashForm.Invoke(
new SplashStatusChangedHandle(delegate(string str) { m_SplashInterface.SetStatusInfo(str); }),
new object[] { value }
);
} } /// <summary>
/// 关闭过渡窗口
/// </summary>
public static void Close()
{
if (m_SplashThread == null || m_SplashForm == null) return; try
{
m_SplashForm.Invoke(new MethodInvoker(m_SplashForm.Close));
}
catch (Exception)
{
}
m_SplashThread = null;
m_SplashForm = null;
} private static void CreateInstance(Type FormType)
{
object obj = FormType.InvokeMember(null,
BindingFlags.DeclaredOnly |
BindingFlags.Public | BindingFlags.NonPublic |
BindingFlags.Instance | BindingFlags.CreateInstance, null, null, null);
m_SplashForm = obj as Form;
m_SplashInterface = obj as ISplashForm;
if (m_SplashForm == null || m_SplashInterface == null)
{
throw (new Exception());
}
if (!string.IsNullOrEmpty(m_TempStatus))
m_SplashInterface.SetStatusInfo(m_TempStatus);
}
private delegate void SplashStatusChangedHandle(string NewStatusInfo);
}调用实例:
加一窗口:public class Form1 :Form,ISplashForm{
public Form1();
}//==========================
//调用:
Splasher.Show(typeof(Form1));
//设置状态:
Splasher.Status="……";
Thread.Sleep(500);
//关闭:
Splasher.Close();
//:)
无法算出来的楼主可以 直接用一个窗体上 显示一个ProgressBar,设置Style=Marquee就是了
如果需要 楼主 也可以
show个窗体 显示 一个gif动画条...
其中它有一个代表当前进度的属性, 这样就可以很好的让用户知道确切的进度。
CS上有个进度条的控件.
BS上找个图片过渡下就行了