WPF SelectionChanged事件在选项卡更改之前执行操作

本文关键字:执行 操作 SelectionChanged 事件 选项 WPF | 更新日期: 2023-09-27 18:08:28

我的WPF应用程序中有SelectionChanged事件。我想当选项卡改变做一些动作,但首先我想要选项卡在动作开始之前改变。我正在使用后台工作人员来做这项工作。我的代码是:

    private void Tab_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        if (tab1.IsSelected)
        {
            //this line is not working
            tabcontrol.SelectedIndex = 1;
            wNetTest = new BackgroundWorker();
            wNetTest.DoWork += new DoWorkEventHandler(worker_DoWork);
            wNetTest.RunWorkerCompleted += worker_RunWorkerCompleted;
            wNetTest.WorkerReportsProgress = true;
            wNetTest.WorkerSupportsCancellation = true;
            wNetTest.RunWorkerAsync();
        }
    }
    void worker_DoWork(object sender, DoWorkEventArgs e)
    {
        //do the job
    }

WPF SelectionChanged事件在选项卡更改之前执行操作

您的问题是代码是同步运行的。因此,Tab_SelectionChanged事件处理程序的每一行都将在之前运行,您将看到TabItem的变化。要解决这个问题,您只需要异步运行长时间运行的流程。最简单的方法之一是:

private void Tab_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    if (tab1.IsSelected)
    {
        //this line is not working
        tabcontrol.SelectedIndex = 1;
        Task.Factory.StartNew(() => LongRunningMethod(parameter));
    }
}
private void LongRunningMethod(object parameter)
{
    // perform long running process here
}

parameter输入参数可选…如果你不需要它,就把它删掉。