日期:2014-05-17  浏览次数:20996 次

C# 线程 和 委托的使用
本帖最后由 loveyang7733 于 2013-08-22 13:33:56 编辑
1、新建一个Form:FrmLoading(等待提示信息),在此窗体内有个Lable(LabMsg:显示提示信息)
2、当我在另一个窗体(FrmUser)里点击保存时,我是想显示FrmLoading,保存执行完成后,关闭FrmLoading

以下是我的代码

//////////////////////////////////////////////////////////////
FrmLoading:只有构造函数:
public FrmLoading()
{
    //防止多线程操作Lable时报错
    Control.CheckForIllegalCrossThreadCalls = false;
    InitializeComponent();
}
//////////////////////////////////////////////////////////////
FrmUser:
private FrmLoading _FrmLoading;
private Thread _ThreadLoading = null;
public string _LoadingMsg = string.Empty;
/// <summary>
/// 显示等待提示
/// </summary>
public void LoadingShow()
{
    _ThreadLoading = new Thread(new System.Threading.ThreadStart(Loading));
    _ThreadLoading.Start();
}
/// <summary>
/// 处理等待提示
/// </summary>
private void Loading()
{
    if (string.IsNullOrEmpty(_LoadingMsg))
    {
        _LoadingMsg = "正在处理,请等待结果显示...";
    }
    _FrmLoading = new FrmLoading();
    _FrmLoading.labelMsg.Text = _LoadingMsg;
    _FrmLoading.ShowDialog();
}
/// <summary>
/// 关闭等待提示
/// </summary>
public void LoadingClose()
{
    if (_FrmLoading != null)
    {
        _LoadingMsg = string.Empty;
        _FrmLoading.Dispose();
        if (_ThreadLoading != null)
        {
            _ThreadLoading.Abort();
            _ThreadLoading = null;
        }
    }
}
//////////////////////////////////////////////////////////////
调用方式:
LoadingShow()
//执行操作...
LoadingClose()
//////////////////////////////////////////////////////////////


我是这么使用线程的,但是经常报一些异常,有时等待窗体也关闭不了,但是大多情况都是好的,调试的时候也是好的
在网上寻找了下答案,貌似用委托可以解决

请高人帮我解决一下!!!谢谢!!!