I'm trying to execute a thread without blocking UI , I've used this code but when I execute my application , it won't execute the thread and nothing is shown after clicking on DoButton event
public void DoThread()
{
    BackgroundWorker worker = new BackgroundWorker();
    worker.DoWork += MyFunctionDoThread;
    var frame = new DispatcherFrame();
    worker.RunWorkerCompleted += (sender, args) => {
        frame.Continue = false;
    };
    worker.RunWorkerAsync();
    Dispatcher.PushFrame(frame);
}
private void Dobutton_Click(object sender, RoutedEventArgs e)
{
    DoThread(); // Process will be executed
}
public void MyFunctionDoThread()
{
    // Some Tasks
    ProcessStartInfo startInfo = new ProcessStartInfo();
    Process.Start(startInfo);
    // ...
}
How I can perform a task ( thread ) without blocking the UI?