定时器按钮重置

时间:2016-06-17 16:43:48

标签: c# wpf

我正在尝试为我的课程制作拍卖申请。

namespace Auction
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {

        public MainWindow()
        {
            InitializeComponent();
            GetData("SELECT * FROM Produs");
            btnLogout.Visibility = System.Windows.Visibility.Hidden;
            btnAdd.Visibility = System.Windows.Visibility.Hidden;
            btnBid.Visibility = System.Windows.Visibility.Hidden;
            tb.Visibility = System.Windows.Visibility.Hidden;

        }

        private void GetData(string SelectCommand)
        {
            SqlConnection conn = new SqlConnection(@"Data Source=ISAAC;Initial Catalog=licitatie;Integrated Security=True");
            conn.Open();
            SqlCommand cmd = new SqlCommand(SelectCommand);
            cmd.Connection = conn;
            SqlDataAdapter sda = new SqlDataAdapter(cmd);
            DataTable dt = new DataTable("prod");
            sda.Fill(dt);
            myGrid.DataContext = dt;
        }
        private void btnLogin_Click(object sender, RoutedEventArgs e)
        {
            Login login = new Login();
            login.Show();
            Close();

        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            Countdown(30, TimeSpan.FromSeconds(1), cur => tb.Text = cur.ToString());
        }
        void Countdown(int count, TimeSpan interval, Action<int> ts)
        {

            var dt = new System.Windows.Threading.DispatcherTimer();
            dt.Interval = interval;
            dt.Tick += (_, a) =>
            {
                if (count-- == 0)
                {
                    MessageBox.Show("You have won this product!");
                    dt.Stop();
                }
                else
                    ts(count);
            };
            ts(count);
            dt.Start();
        }

        private void btnLogout_Click(object sender, RoutedEventArgs e)
        {
            MainWindow main = new MainWindow();
            main.Show();
            Close();
            MessageBox.Show("You are not logged. Please log in to bid", "Failed", 
                MessageBoxButton.OK, MessageBoxImage.Information);

        }

        private void btnAdd_Click(object sender, RoutedEventArgs e)
        {
            Register reg = new Register();
            reg.Show();
            Close();
        }

        private void DataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {

            var grid = sender as DataGrid;
            var selected = grid.SelectedItem;
            if (selected == grid.SelectedItem)
            {
                btnBid.Visibility = System.Windows.Visibility.Visible;

            }
        }
        private void UpdateColumn()
        {

        }
    }
}

这是您需要登录的主页。我从数据库中读取数据。问题是,当我多次按下出价按钮时,它只是重置,但在后台正在进行中。我需要做什么?

    <Window x:Class="Auction.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow"  Height="500" Width="800">
    <Grid Margin="0,148,0,3" Name="myGrid" Background="#FF00286E">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="29*"/>
            <ColumnDefinition Width="15*"/>
            <ColumnDefinition Width="0*"/>
        </Grid.ColumnDefinitions>
        <Grid HorizontalAlignment="Left" Height="66" Margin="0,-68,0,0" VerticalAlignment="Top" 
              Width="792" Background="#FF00286E" Grid.ColumnSpan="2">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="12*"/>
                <ColumnDefinition Width="13*"/>
            </Grid.ColumnDefinitions>
            <Button Content="Login" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Bottom" 
                    Width="102" Height="35" Name="btnLogin" Click="btnLogin_Click">
                <Button.Template>
                    <ControlTemplate TargetType="Button">
                        <TextBlock TextDecorations="Underline"  Margin="0,0,0,-19" FontSize="24" 
                               FontFamily="Verdana" FontWeight="Bold" FontStyle="Italic">
                    <ContentPresenter />
                        </TextBlock>
                    </ControlTemplate>
                </Button.Template>
            </Button>
            <Button Content="Logout" Grid.Column="1" HorizontalAlignment="Left" Margin="300,10,0,0" VerticalAlignment="Bottom" 
                    Width="102" Height="35" Name="btnLogout" Click="btnLogout_Click">
                <Button.Template>
                    <ControlTemplate TargetType="Button">
                        <TextBlock TextDecorations="Underline"  Margin="0,0,0,-19" FontSize="24" 
                               FontFamily="Verdana" FontWeight="Bold" FontStyle="Italic">
                    <ContentPresenter />
                        </TextBlock>
                    </ControlTemplate>
                </Button.Template>
            </Button>
        </Grid>
        <Grid HorizontalAlignment="Left" Height="78" Margin="0,-146,0,0" VerticalAlignment="Top" Width="792" 
              Grid.ColumnSpan="2" Background="#FF98BFD4">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="769*"/>
                <ColumnDefinition Width="31*"/>
            </Grid.ColumnDefinitions>
            <Label Content="Welcome to Auction Application.  Please Login to bid!" HorizontalAlignment="Center" Margin="44,28,0,0" VerticalAlignment="Top" 
                   Height="40" Width="748" BorderThickness="3" FontSize="18" FontWeight="Bold" FontFamily="Verdana" Background="#FF98BFD4" Grid.ColumnSpan="2"/>
        </Grid>
        <Button Content="Bid" Grid.Column="1" HorizontalAlignment="Left" Margin="10,10,0,0" 
                VerticalAlignment="Top" Width="103" Height="29" FontSize="20" FontFamily="Verdana" FontStyle="Italic" 
                FontWeight="ExtraBold" Click="Button_Click" Name="btnBid"/>

        <Button Content="Add User" Grid.Column="1" HorizontalAlignment="Left" Margin="10,255,0,0" 
                VerticalAlignment="Top" Width="103" Height="31" Name="btnAdd" Click="btnAdd_Click"/>
        <DataGrid HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" 
                  Height="298" Width="502" Name="dataGrid1" ItemsSource="{Binding}" 
                  SelectionChanged="DataGrid_SelectionChanged" AlternatingRowBackground="Coral">

        </DataGrid>
        <TextBox Grid.Column="1" HorizontalAlignment="Left" Height="48" Margin="10,119,0,0" TextWrapping="Wrap" 
                 VerticalAlignment="Top" Width="144" Name="tb" FontSize="20" FontWeight="Bold" FontStyle="Italic" IsReadOnly="True"/>
    </Grid>
</Window>

1 个答案:

答案 0 :(得分:0)

如果我理解正确,每次用户点击“出价”按钮时,您需要重置计时器。但是,之前的计时器仍在继续。我没有将您的代码粘贴到要测试的项目中,但在我看来,您需要使调度计时器成为类字段或属性,如下所示:

private DispatchTimer _dt = new System.Windows.Threading.DispatcherTimer();

在Bid的事件处理程序中,首先停止当前的_dt,然后实例化新的计时器:

_dt.Stop();
_dt = new System.Windows.Threading.DispatcherTimer();

尝试此更改:

namespace Auction
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        //Class level field:
        private DispatchTimer _dt = new System.Windows.Threading.DispatcherTimer();
        public MainWindow()
        {
            InitializeComponent();
            GetData("SELECT * FROM Produs");
            btnLogout.Visibility = System.Windows.Visibility.Hidden;
            btnAdd.Visibility = System.Windows.Visibility.Hidden;
            btnBid.Visibility = System.Windows.Visibility.Hidden;
            tb.Visibility = System.Windows.Visibility.Hidden;

        }

        private void GetData(string SelectCommand)
        {
            SqlConnection conn = new SqlConnection(@"Data Source=ISAAC;Initial Catalog=licitatie;Integrated Security=True");
            conn.Open();
            SqlCommand cmd = new SqlCommand(SelectCommand);
            cmd.Connection = conn;
            SqlDataAdapter sda = new SqlDataAdapter(cmd);
            DataTable dt = new DataTable("prod");
            sda.Fill(dt);
            myGrid.DataContext = dt;
        }
        private void btnLogin_Click(object sender, RoutedEventArgs e)
        {
            Login login = new Login();
            login.Show();
            Close();

        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {

            Countdown(30, TimeSpan.FromSeconds(1), cur => tb.Text = cur.ToString());
        }
        void Countdown(int count, TimeSpan interval, Action<int> ts)
        {
            this._dt.Stop();
            this._dt = new System.Windows.Threading.DispatcherTimer();

            this._dt.Interval = interval;
            this._dt.Tick += (_, a) =>
            {
                if (count-- == 0)
                {
                    MessageBox.Show("You have won this product!");
                    this._dt.Stop();
                }
                else
                    ts(count);
            };
            ts(count);
            this._dt.Start();
        }

        private void btnLogout_Click(object sender, RoutedEventArgs e)
        {
            MainWindow main = new MainWindow();
            main.Show();
            Close();
            MessageBox.Show("You are not logged. Please log in to bid", "Failed", 
                MessageBoxButton.OK, MessageBoxImage.Information);

        }

        private void btnAdd_Click(object sender, RoutedEventArgs e)
        {
            Register reg = new Register();
            reg.Show();
            Close();
        }

        private void DataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {

            var grid = sender as DataGrid;
            var selected = grid.SelectedItem;
            if (selected == grid.SelectedItem)
            {
                btnBid.Visibility = System.Windows.Visibility.Visible;

            }
        }
        private void UpdateColumn()
        {

        }
    }
}