• C#关于多线程之线程中打开并调用窗体内的方法实例


    第一步:如何在线程中打开窗体

                SendEmailProgress  progress=new SendEmailProgress();
                //添加窗体关闭事件
                    progress.Closing += (s, ev) =>
                    {
                        if (progress.IsEnabledCloseForm)
                        {
                        }
                        else
                        {
                            ev.Cancel = true;//关闭窗体
                        }
    
                    };
                    Control.CheckForIllegalCrossThreadCalls = false; //在这个类中我们不检查跨线程的调用是否合法
                    Thread thread = new Thread(new ParameterizedThreadStart(ShowCommonProgressFormDialog));
                    thread.Start();
                    if (isFirst)
                    {
                        Thread.Sleep(5000);
                        isFirst = false;
                    }
                   progress.WriteMessage("","","");//
    
            private static void ShowCommonProgressFormDialog(object message)
            {
                try
                {
                    int num = (int)progress.ShowDialog();
                }
                catch (Exception)
                {
                }
            }
    

    第二步:调用窗体内的方法。

    private delegate void WriteMessageHandler(string message, EnumColorInts eci, bool isNeedSetSize);
            /// <summary>
            /// 显示提示消息
            /// </summary>
            /// <param name="message"></param>
            /// <param name="eci"></param>
            private void WriteMessage(string message, EnumColorInts eci,bool isNeedSetSize)
            {
                Font font = new Font(FontFamily.GenericMonospace, 14, FontStyle.Regular);  
                //如果控件的 System.Windows.Forms.Control.Handle 是在与调用线程不同的线程上创建的(说明您必须通过 Invoke
                //方法对控件进行调用),则为 true;否则为 false。
                //(备注:获取一个值,该值指示调用方在对控件进行方法调用时是否必须调用 Invoke 方法,因为调用方位于创建控件所在的线程以外的线程中。)
    
                if (InvokeRequired)
                {
                    WriteMessageHandler handler = WriteMessage;
                    Invoke(handler, new object[] { message, eci, isNeedSetSize });
                }
                else
                {
                    int index = RtMessageBox.Text.Length;
                    RtMessageBox.AppendText(message);
                    RtMessageBox.Select(index, message.Length);
                    else
                    {
                        switch (eci)
                        {
                            case EnumColorInts.Red:
                                RtMessageBox.SelectionColor = Color.Red;
                                break;
                            case EnumColorInts.Green:
                                RtMessageBox.SelectionColor = Color.Green;
                                break;
                            case EnumColorInts.Black:
                            default:
                                RtMessageBox.SelectionColor = Color.Black;
                                break;
                        }
                    }
                    RtMessageBox.AppendText("
    ");
                    RtMessageBox.SelectionStart = RtMessageBox.Text.Length;
                    RtMessageBox.ScrollToCaret();
                }
            }
    

    以上仅作为个人学习积累。。。。。。

  • 相关阅读:
    dart 函数迭代器
    dart 编译
    dart 扩展方法
    dart 包
    默认2345导航
    (24)WPF 数据绑定
    (22)WPF 控件模板
    JSP慕课网之Session
    HTML <td> 标签的 colspan 属性
    HTML Input属性
  • 原文地址:https://www.cnblogs.com/DreakSeeker/p/8399039.html
Copyright © 2020-2023  润新知