Как сделать ярлык невидимым через 15 секунд после нажатия кнопки? - PullRequest
0 голосов
/ 11 октября 2019

Я не знаю, что использовать таймер или оператор if. как это вызвать? тогда пусть появится другой ярлык?

namespace Labeltimer
{

public partial class MainPage : ContentPage
{

    public MainPage()
    {
        InitializeComponent();
        MyImage.Source = ImageSource.FromFile("logo.png");

    }

    void TButton_Clicked(object sender, System.EventArgs e)
    {

        T1Text.IsVisible = true;

        //T2Text.IsVisible = true;

    }

}
}

Ответы [ 4 ]

2 голосов
/ 11 октября 2019

Внутри вашего TButton_Clicked:

async void TButton_Clicked(object sender, System.EventArgs e)
{
    await Task.Delay(15000); // 15000ms == 15s
    T1Text.IsVisible = false;
}

Я рекомендую вам прочитать больше об асинхронном программировании.

1 голос
/ 11 октября 2019

Есть много методов, которые вы можете выбрать, например:

1.System.Timers.Timer

private  void TButton_Clicked(object sender, EventArgs e)
    {
        System.Timers.Timer t = new System.Timers.Timer(15000);   // intial class Timer,set internal 15000ms;   
        t.Elapsed += new System.Timers.ElapsedEventHandler(doSometing2); //Execute events at time of arrival; 
        t.AutoReset = false;   //Set to execute (false) once and execute (true) all the time   
        t.Enabled = true;
    }

метод doSometing2

private void doSometing2(object sender, ElapsedEventArgs e)
    {
        Device.BeginInvokeOnMainThread(() =>
        {
            mLabel.IsVisible = false;
        });
    }

2. Device.StartTimer

 private  void TButton_Clicked(object sender, EventArgs e)
    {
        Device.StartTimer(TimeSpan.FromSeconds(15), doSometing);
    }

метод doSometing

private bool doSometing()
    {
        Device.BeginInvokeOnMainThread(() =>
        {
            mLabel.IsVisible = false;
        });
        return true;
    }

3. Thread.Sleep

private  void TButton_Clicked(object sender, EventArgs e)
    {
        Thread.Sleep(15000);
        mLabel.IsVisible = false;
    }

4. Task.Delay

private async void TButton_Clicked(object sender, EventArgs e)
    {
        await Task.Delay(15000); // 15000ms == 15s
        mLabel.IsVisible = false;
    }
0 голосов
/ 11 октября 2019
public class StateToVisibilityConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, 
                System.Globalization.CultureInfo culture)
        {
            if (value is State)
            {
                State state = (State)value;
                switch (state)
                {
                    case State.Away:
                    case State.Gone:
                        return Visibility.Visible;
                    default:
                        return Visibility.Collapsed;
                }
            }
        }
        enter code here
        public object ConvertBack(object value, Type targetType, object parameter, 
                System.Globalization.CultureInfo culture)
        {
            return State.None; // your default state
        }
    }
0 голосов
/ 11 октября 2019

Как я это делаю, просто добавьте StartTimer внутри этого метода, он получит вызов через 15 секунд:

 Device.StartTimer(TimeSpan.FromSeconds(15), () =>
        {
            T1Text.IsVisible = false;
            return false;
        });

вернет false, если вы хотите, чтобы это произошло только один раз (как SetTimeout из JS),else верните true (как SetInterval of JS), если вы хотите, чтобы это происходило каждые 15 секунд.

...