C# 显示(“您已赢得此产品!”); 这个。_dt.Stop(); } 其他的 ts(计数); }; ts(计数); 这个。_dt.Start(); } 私有无效btnLogout\U单击(对象发送者,路由目标e) { MainWindow main=新的MainWindow(); main.Show(); Close(); MessageBox.Show(“您未登录,请登录竞拍”,“失败”, MessageBoxButton.OK,MessageBoxImage.Information); } 私有无效btnAdd_单击(对象发送者,路由目标e) { 寄存器reg=新寄存器(); reg.Show(); Close(); } private void DataGrid_SelectionChanged(对象发送方,SelectionChangedEventArgs e) { var grid=发送方作为数据网格; var selected=grid.SelectedItem; if(selected==grid.SelectedItem) { btnBid.Visibility=System.Windows.Visibility.Visible; } } 私有void UpdateColumn() { } } }

C# 显示(“您已赢得此产品!”); 这个。_dt.Stop(); } 其他的 ts(计数); }; ts(计数); 这个。_dt.Start(); } 私有无效btnLogout\U单击(对象发送者,路由目标e) { MainWindow main=新的MainWindow(); main.Show(); Close(); MessageBox.Show(“您未登录,请登录竞拍”,“失败”, MessageBoxButton.OK,MessageBoxImage.Information); } 私有无效btnAdd_单击(对象发送者,路由目标e) { 寄存器reg=新寄存器(); reg.Show(); Close(); } private void DataGrid_SelectionChanged(对象发送方,SelectionChangedEventArgs e) { var grid=发送方作为数据网格; var selected=grid.SelectedItem; if(selected==grid.SelectedItem) { btnBid.Visibility=System.Windows.Visibility.Visible; } } 私有void UpdateColumn() { } } },c#,wpf,C#,Wpf,如果我理解正确,每次用户单击Bid按钮时,您都需要重置计时器。但是,前一个计时器将继续。我还没有将您的代码粘贴到要测试的项目中,但在我看来,您需要将分派计时器设置为类字段或属性,如下所示: private DispatchTimer _dt = new System.Windows.Threading.DispatcherTimer(); 在Bid的事件处理程序中,首先停止当前_dt,然后实例化新计时器: _dt.Stop(); _dt = new System.Windows.Threadi

如果我理解正确,每次用户单击Bid按钮时,您都需要重置计时器。但是,前一个计时器将继续。我还没有将您的代码粘贴到要测试的项目中,但在我看来,您需要将分派计时器设置为类字段或属性,如下所示:

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()
        {

        }
    }
}
名称空间拍卖
{
/// 
///MainWindow.xaml的交互逻辑
/// 
公共部分类主窗口:窗口
{
//类别级别字段:
private DispatchTimer_dt=new System.Windows.Threading.DispatchTimer();
公共主窗口()
{
初始化组件();
GetData(“从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;
}
私有void GetData(字符串SelectCommand)
{
SqlConnection conn=newsqlconnection(@“数据源=ISAAC;初始目录=licitae;集成安全=True”);
conn.Open();
SqlCommand cmd=新的SqlCommand(SelectCommand);
cmd.Connection=conn;
SqlDataAdapter sda=新的SqlDataAdapter(cmd);
数据表dt=新数据表(“产品”);
sda.填充(dt);
myGrid.DataContext=dt;
}
私有void btnLogin\u单击(对象发送者,路由目标e)
{
Login Login=新登录();
login.Show();
Close();
}
私有无效按钮\u单击(对象发送者,路由目标e)
{
倒计时(30,TimeSpan.FromSeconds(1),cur=>tb.Text=cur.ToString());
}
无效倒计时(整数计数、时间间隔、操作ts)
{
这个。_dt.Stop();
这是。_dt=new System.Windows.Threading.dispatchermer();
这个时间间隔=时间间隔;
这个。dt.Tick+=(dt,a)=>
{
如果(计数--==0)
{
Show(“你赢得了这个产品!”);
这个。_dt.Stop();
}
其他的
ts(计数);
};
ts(计数);
这个。_dt.Start();
}
私有无效btnLogout\U单击(对象发送者,路由目标e)
{
MainWindow main=新的MainWindow();
main.Show();
Close();
MessageBox.Show(“您未登录,请登录竞拍”,“失败”,
MessageBoxButton.OK,MessageBoxImage.Information);
}
私有无效btnAdd_单击(对象发送者,路由目标e)
{
寄存器reg=新寄存器();
reg.Show();
Close();
}
private void DataGrid_SelectionChanged(对象发送方,SelectionChangedEventArgs e)
{
var grid=发送方作为数据网格;
var selected=grid.SelectedItem;
if(selected==grid.SelectedItem)
{
btnBid.Visibility=System.Windows.Visibility.Visible;
}
}
私有void UpdateColumn()
{
}
}
}

您能否再详细描述一下bid按钮的预期行为?每次有人出价时,计时器都应该重置,对吗?你能再描述一下出价按钮的预期行为吗?每次有人出价时,计时器都应该重置,对吗?你能更准确地指出我需要做什么吗。你已经完全明白了。如果这样行的话,请你把我的答案记下来好吗?你能更准确地说明我需要做什么吗。你已经完全明白了。如果这样行的话,请你把我的答案记下来好吗?
_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()
        {

        }
    }
}