C# 将输出重定向到另一个窗体

C# 将输出重定向到另一个窗体,c#,winforms,telerik,C#,Winforms,Telerik,我有一个WinForms应用程序,它有两个表单——Form1和Form2。 我在Form1中有一个发送电子邮件的循环。 我想从Form1中的循环发送状态消息 到Form2中的RichTextBox。 我怎样才能做到这一点? 欢迎任何反馈。解决方案取决于两个表单之间的关系:Form1是否知道Form2,例如,因为Form1创建了Form2 class Form1 : Form { private Form2 Form2 {get; set;} private void Creat

我有一个WinForms应用程序,它有两个表单——Form1和Form2。 我在Form1中有一个发送电子邮件的循环。 我想从Form1中的循环发送状态消息 到Form2中的RichTextBox。 我怎样才能做到这一点?
欢迎任何反馈。

解决方案取决于两个表单之间的关系:Form1是否知道Form2,例如,因为Form1创建了Form2

class Form1 : Form
{
    private Form2 Form2 {get; set;}

    private void CreateForm2()
    {
        this.Form2 = new Form2;
    }

    private void SendStatusMessage(StatusMessage message)
    {
        this.Form2.ProcessStatusMessage(message);
    }
}
如果Form1不知道Form2,但Form2知道Form1,那么您应该更改Form1,使其在状态消息可用时发送事件

public class EventStatusMessageArgs : EventArgs
{
    public StatusMessage Message { get; set; }

}

class Form1 : Form
{
    public Event EventHandler<EventStatusMessageArgs> StatusMessageCreated;

    protected virtual void OnStatusMessageCreated(StatusMessage statusMessage)
    {
         var eventHandler = new EventStatusMessageArgs
         {
              SatusMessage = statusMessage;
         };
         this.StatusMessageCreated?.Invoke(this, eventHandler);
    }

    private void CreateStatusMessage(...)
    {
        StatusMessage statusMessage = ...
        this.OnStatusMessageCreated(statusMessage);
    }
}

class Form2 : Form
{
    // Form2 somehow knows about existence Form1
    public Form1 Form1 {get; set;}

    public void OnFormLoading (object sender, ...)
    {
         // subscribe to events from Form1:
         this.Form1.StatusMessageCreated += this.OnForm1CreatedStatusMessage;
    }

    public void OnForm1CreatedStatusMessage(object sender, EventStatusMessageArgs args)
    {
         StatusMessage createdStatusMessage = args.StatusMessage;
         this.ProcessCreatedStatusMessage(createdStatusMessage);
    }
}

顺便问一下:当物品被处置时,总是取消订阅活动。

这是否回答了您的问题?请看一下,如果可能的话,改进你的问题,帮助我们理解你的问题。我不确定。我想从Form1向Form2实时发送多条消息。
class MainForm : Form
{
    private readonly Form1 form1;
    private readonly Form2 form2;

    public MainForm()
    {
        InitializeComponents();

        this.form1 = new Form1() {...};
        this.form2 = new Form2() {...};

        // make sure that the StatusMessage events from form1 go to form2:
        this.form1.StatusMessageCreated += this.form2.OnForm1CreatedStatusMessage;
    }           
}