第一步:如何在线程中打开窗体
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("\r\n");
RtMessageBox.SelectionStart = RtMessageBox.Text.Length;
RtMessageBox.ScrollToCaret();
}
}
以上仅作为个人学习积累。。。。。。