Primeiro, envolva seu código de atualização em um método próprio e chame-o do seu método de manipulador de eventos de clique, assim:
private void btnRefresh_Click(object sender, EventArgs e)
{
this.RefreshData();
}
public void RefreshData()
{
GVThesis.DataSource = thesisRepository.GetThesis();
GVThesis.Refresh();
}
Então, supondo que você esteja instanciando e iniciando o novo formulário (Form2) do seu Form1, basta entrar no código do Form2 e criar uma nova sobrecarga de construtor que aceitará uma referência ao Form1 e armazená-lo em uma variável privada, assim :
public partial class Form2 : Form
{
private Form1 frm1;
public Form2()
{
InitializeComponent();
}
public Form2(Form1 otherForm)
{
InitializeComponent();
this.frm1 = otherForm;
}
}
Então você pode chamar o "atualizar" de qualquer lugar que desejar no Form2 assim:
this.frm1.RefreshData();
EDITAR:
Criei uma pequena amostra, não consigo carregá-la aqui... mas aqui está uma captura de tela do próprio programa no VS, bem como uma captura de tela do resultado de executá-lo e executar a função ...espero que ajude.
O programa (amplie sua visão se parecer muito pequeno)
O resultado: