Invoke или BeginInvoke не могут быть вызваны для элемента управления ... даже с помощью CreateControl () - PullRequest
0 голосов
/ 28 декабря 2018

Я не могу изменить из моей Формы1 элемент, который принадлежит Форме 2.

public partial class Project : Form
{
    public Form2 form = new Form2();

    public Project()
    {
        InitializeComponent();
    }

    private void Project_Load(object sender, EventArgs e)
    {
        form.CreateControl();
    }

    private void buttonOpenForm2_Click(object sender, EventArgs e)
    {
        form.Show();
    }

    private void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
    {
        var indata = *whatever serial input data here*
        bool result = Int32.TryParse(indata, out int data);

        if (result) {
        form.chart1.Invoke(new Action(() => { form.chart1.Series[0].Points.AddY(data); }));
        }
    }

Каждый раз, когда я нажимаю кнопку, чтобы показать Форму2 и ее диаграмму, в * 1004 возникает исключение*: Invoke or BeginInvoke cannot be called on a control until the window handle has been created.

Почему это происходит, если я заставляю form сделать CreateControl()?

1 Ответ

0 голосов
/ 28 декабря 2018

Сообщение об ошибке говорит вам, что не так.

Ваш последовательный порт срабатывает до того, как form2 (который содержит вашу диаграмму) полностью создан

Я думаю, вы могли бы проверитьвидимый флаг (возможно, есть много других)

private void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
{

   ...

   if(!form?.Visible)
      return;

   form.chart1.Invoke(...

Предполагается, что если его не видно, вы не хотите отображать данные


Дополнительные сведения

Порядок событий в Windows Forms

События запуска и завершения работы приложения

Классы Form и Control предоставляют набор событий, связанных с запуском и закрытием приложения.При запуске приложения Windows Forms события запуска основной формы генерируются в следующем порядке:

Control.HandleCreated

Control.BindingContextChanged

Form.Load

Control.VisibleChanged

Form.Acactive

Form.Shown

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...