Предотвратить программу отправки Invoke ошибки для CircularProgressBar - PullRequest
0 голосов
/ 04 декабря 2018

Я выбрал CircularProgressBar в моей форме1, которая показывает местное время города, и он работает нормально.Но когда я открываю form2 и хочу использовать form1.Controls, мне нужно создать объект form1 для использования элементов управления.Но когда я хочу создать объект, он все время показывает ошибку.Я также отправлю свой код и сообщения об ошибках.

private void Timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{

    if (!this.IsHandleCreated)
        this.CreateControl();

    CircularTime.Invoke((MethodInvoker)delegate
    {
        CircularTime.Text = DateTime.Now.ToString("hh:mm:ss");
        CircularTime.SubscriptText = DateTime.Now.ToString("tt");
    });
}

И ошибка:

System.InvalidOperationException: 'Invoke или BeginInvoke не могут быть вызваны для элемента управления, покадескриптор окна создан. '

Любое предложение будет оценено.

ОБНОВЛЕНИЕ

public Main_Form()
{
    InitializeComponent();
    System.Timers.Timer timer = new System.Timers.Timer();
    timer.Interval = 1000;
    timer.Elapsed += Timer_Elapsed;
    timer.Start();
}

CircularTime - это элемент управления в форме типа CircularProgressBar (из одноименного пакета NuGet).CircularProgressBar работает точно так же, как ProgressBar, но с круговой формой.

После добавления пакета NuGet я добавил CircularProgressBar.dll из папки пакета в панель инструментов, а затем перетащил одну в свою форму.

Есть предложения?

1 Ответ

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

Из моего комментария:

Это опасный таймер, поскольку форма не может его утилизировать.Объявите его на уровне формы и используйте вместо него таймер WinForm, который решит проблему с многопоточностью:

System.Windows.Forms.Timer timer = new System.Windows.Forms.Timer();

public Main_Form()
{
    InitializeComponent();
    timer.Interval = 1000;
    timer.Tick += timer_Tick;
    timer.Start();
}

void timer_Tick(object sender, EventArgs e) {
  CircularTime.Text = DateTime.Now.ToString("hh:mm:ss");
  CircularTime.SubscriptText = DateTime.Now.ToString("tt");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...