Ваш класс не должен менять форму.
Однако вы можете создать делегат или событие в вашем классе и позволить вашему классу вызвать это событие, когда необходимо предпринять какое-то действие.
Ваша форма может прикрепить обработчик событий к этому событию и выполнить соответствующее действие.
Например:
class MyClass
{
public event EventHandler DoSomething;
public void DoWork()
{
// do some stuff
// raise the DoSomething event.
OnDoSomething(EventArgs.Empty);
}
protected virtual void OnDoSomething(EventArgs args )
{
// This code will make sure that you have no IllegalThreadContext
// exceptions, and will avoid race conditions.
// note that this won't work in wpf. You could also take a look
// at the SynchronizationContext class.
EventHandler handler = DoSomething;
if( handler != null )
{
ISynchronizeInvoke target = handler.Target as ISynchronizeInvoke;
if( target != null && target.InvokeRequired )
{
target.Invoke (handler, new object[]{this, args});
}
else
{
handler(this, args);
}
}
}
}
И в своей Форме вы делаете это:
MyClass c = new MyClass();
c.DoSomething += new EventHandler(MyClass_DoSomething);
c.DoWork();
private void MyClass_DoSomething(object sender, EventArgs e )
{
// Manipulate your form
textBox1.Text = " ... ";
}
Если вы хотите передать некоторые данные из вашего класса в форму, вы можете использовать универсальный делегат EventHandler и создать свой собственный класс EventArgs, который содержит информацию, необходимую вашей форме.
public class MyEventArgs : EventArgs
{
public string SomeData
{ get;
private set;
}
public MyEventArgs( string s )
{
this.SomeData = s;
}
}
Тогда, конечно, вам придется использовать универсальный обработчик событий в вашем классе и передавать соответствующие данные в конструктор вашего собственного класса eventargs.
В обработчике событий вы можете использовать эти данные.