У меня есть форма, где вам нужно сделать несколько обновлений, используя метод поточно-ориентированных вызовов элементов управления Windows Forms
Выдержки из кода, которые делают это, повторяются несколько раз. Пытаясь провести рефакторинг, я создал некий общий метод обновления.
У меня есть класс для регистрации методов, которые будут использоваться в общем metdo:
public class ListOfUpdateMethods
{
public delegate void Metodo();
private List<Metodo> MetodosPreAtualizacao;
private List<Metodo> MetodosAtualizacao;
public ListOfUpdateMethods()
{
this.MetodosPreAtualizacao = new List<Metodo>();
this.MetodosAtualizacao = new List<Metodo>();
}
public void AddMetodosPreAtualizacao(Metodo m)
{
this.MetodosPreAtualizacao.Add(m);
}
public void AddMetodosAtualizacao(Metodo m)
{
this.MetodosPreAtualizacao.Add(m);
}
public void ExecutaMetodosPreAtualizacao()
{
foreach (var m in this.MetodosPreAtualizacao)
m();
}
public void ExecutaMetodosAtualizacao()
{
foreach (var m in this.MetodosAtualizacao)
m();
}
}
Метод:
//General method for updating all Controls as needed
private void UpdadeControl(ListOfUpdateMethods list, Control control)
{
//Execute required methods before updating the control
list.ExecutaMetodosPreAtualizacao();
if (control.InvokeRequired)
{
var up = new Updates(UpdadeControl);
Invoke(up, new object[] { list, control });
}
else
{
//Execute methods needed to update control
list.ExecutaMetodosAtualizacao();
}
}
Когда я хочу обновить какой-то элемент управления, я делаю следующее:
ListOfUpdateMethods VariavelDeInstancia = new ListOfUpdateMethods();
UpdateStopXRayTimer.AddMetodosAtualizacao(MetodoComInstrucoesQUeAtualizaOControle);
UpdadeControl(VariavelDeInstancia, ControleASerAtualizado);
Однако, когда вызывается MetodoComInstrucoesQUeAtualizaOControle, возникает исключение доступа для скрещенных theadins. То есть метод не работает на основной ступени.
Примером того, что вы будете иметь в этом методе, будет:
void MetodoComInstrucoesQUeAtualizaOControle()
{
ControleASerAtualizado = "Text";
}
У кого-нибудь есть советы по решению описанной проблемы?