Кнопка не может быть нажата, когда таймер работает C # - PullRequest
0 голосов
/ 06 ноября 2018

Я подал заявку на выделение текста с кнопкой выхода. Кнопка работает нормально, когда таймер отключен, но ее нельзя нажать, когда таймер включен. Кто-нибудь может мне помочь, пожалуйста! Я пытался исследовать онлайн, но, похоже, ответа нет, спасибо! :)

это код, который у меня есть

    public FORM_ENTRY()
    {
        InitializeComponent();
        LabelWelcome.Text = "Welcome! Welkom! Selamat Datang! Wilkommen!";
        timer1.Enabled = true;
        LabelCheckedIn.Visible = false;
        LabelEnjoy.Visible = false;
    }

    private void StartScroll()
    {
        System.Text.StringBuilder sb = new System.Text.StringBuilder(LabelWelcome.Text + " ");

        while (true)
        {
            char ch = sb[sb.Length - 1];
            sb.Remove(sb.Length - 1, 1);
            sb.Insert(0, ch);
            LabelWelcome.Text = sb.ToString();
            LabelWelcome.Refresh();
            System.Threading.Thread.Sleep(500);
        }
    }

    private void timer1_Tick(object sender, EventArgs e)
    {
        StartScroll();
    }

    private void ButtonExit_Click(object sender, EventArgs e)
    {
        this.Close();
    }

1 Ответ

0 голосов
/ 06 ноября 2018

Используйте DispatchTimer , он будет работать в отдельном потоке, и событие будет инициировано в потоке пользовательского интерфейса, поэтому вы сможете изменить свой пользовательский интерфейс

private DispatcherTimer dispatcherTimer;


public FORM_ENTRY()
{
    InitializeComponent();
    LabelWelcome.Text = "Welcome! Welkom! Selamat Datang! Wilkommen!";
    LabelCheckedIn.Visible = false;
    LabelEnjoy.Visible = false;

    // Initialize Dispatcher
    dispatcherTimer = new System.Windows.Threading.DispatcherTimer();
    dispatcherTimer.Tick += new EventHandler(dispatcherTimer_Tick);
    // Five seconds delay
    dispatcherTimer.Interval = new TimeSpan(0, 0, 5);
    dispatcherTimer.Start();
}

private void dispatcherTimer_Tick(object sender, EventArgs e)
{
    System.Text.StringBuilder sb = new System.Text.StringBuilder(LabelWelcome.Text);        
    char ch = sb[sb.Length - 1];
    sb.Remove(sb.Length - 1, 1);
    sb.Insert(0, ch);
    LabelWelcome.Text = sb.ToString();
}

private void ButtonExit_Click(object sender, EventArgs e)
{
    this.Close();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...