Программа не запускается, когда установлена ​​истина l oop? - PullRequest
0 голосов
/ 22 февраля 2020

Я хотел сделать программу, которая печатает «А», если кнопка запуска активирована, я попробовал это:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace Spam_Spammer
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            while (true)
            {
                if (start.IsEnabled == false)
                {
                    System.Diagnostics.Debug.WriteLine("Ah");
                }
            }
        }
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            start.IsEnabled = false;
            stop.IsEnabled = true;
            check.IsEnabled = false;
            spam_text.IsEnabled = false;
            endpoint.IsEnabled = false;
        }

        private void Stop_Click(object sender, RoutedEventArgs e)
        {
            start.IsEnabled = true;
            stop.IsEnabled = false;
            check.IsEnabled = true;
            spam_text.IsEnabled = true;
            endpoint.IsEnabled = true;
        }
    }
}

но когда я запускаю программу, похоже, что программа запускается, кроме фактического пользовательского интерфейса здесь нет? Какие-нибудь исправления?

Что происходит, когда я запускаю его

Что предполагается запустить

1 Ответ

0 голосов
/ 22 февраля 2020

Окно не открывается должным образом, потому что оно никогда не покидает своего конструктора. Вы можете запустить код как Task от нажатия кнопки, чтобы он не блокировал поток пользовательского интерфейса.

public partial class MainWindow : Window
{
    static volatile bool running = false;
    public MainWindow()
    {
        InitializeComponent();
    }

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        if (running)
            return;

        running = true;
        Task.Run(() =>
        {
            while (running)
            {
                Debug.WriteLine("Running");
            }
        });
    }

    private void stop_Click(object sender, RoutedEventArgs e)
    {
        running = false;
    }
}

Обратите внимание, что Task.Run() возвращается почти сразу (следовательно, вызывая метод завершается sh) но само задание будет продолжать выполняться. Таким образом, вам не нужно полностью отключать элементы пользовательского интерфейса.

Task.Run docs

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