gpt4 book ai didi

c# - 在 C# 中调用 showdialog 时出现 Threadabortexception

转载 作者:行者123 更新时间:2023-11-30 19:52:35 26 4
gpt4 key购买 nike

我有一个应用程序可以解析大型 XML 文件并基于该内容构建 WPF UI 控件。此任务通常需要大约 15 - 30 秒。为了通知用户有关正在运行的任务,我显示了一个简单的中间进度对话框窗口,例如:

Thread progressDialogThread = new Thread(() =>
{
Window window = new Window
{
Content = new ProgressDialog(),
Height = 100,
Width = 150,
WindowStartupLocation = System.Windows.WindowStartupLocation.CenterScreen
};
window.ShowDialog();
});

progressDialogThread.SetApartmentState(ApartmentState.STA);
progressDialogThread.IsBackground = true;
progressDialogThread.Start();

buildUI();

progressDialogThread.Abort();

这行得通,但我有时会在 progressDialogThread.Start() 上遇到 ThreadAbortException,此时应该再次解析 XML。

有谁知道“关闭”进度对话框的更好方法?

由于必须在主 UI 线程上构建控件,所以我不能使用 backgroundworker...

XAML 中的进度对话框本身如下所示:

<UserControl x:Class="MyDialog.ProgressDialog"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:MyDialog"
mc:Ignorable="d"
Background="{DynamicResource MaterialDesignPaper}"
TextElement.Foreground="{DynamicResource MaterialDesignBody}"
Height="100" Width="150">
<StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
<Label HorizontalAlignment="Center">Please wait</Label>
<ProgressBar
Style="{StaticResource MaterialDesignCircularProgressBar}"
Value="0"
IsIndeterminate="True" Width="40" Height="41" Margin="55,0" HorizontalAlignment="Center" VerticalAlignment="Center" />
</StackPanel>
</UserControl>

最佳答案

不要中止一个线程,应该避免这种情况。

如果你想关闭一个Window,你可以在它上面调用Close

哦,是别的线程创建的?好吧,这就是 Window 有一个 Dispatcher 的原因,您使用 BeginInvoke 它将在该线程上运行回调。

事实上,您有可能不需要在另一个线程中创建Window※。您可以在主线程中创建它,并让后台线程通过 BeginInvoke 与其交互。

※:如果你的主线程很忙并且想要在另一个线程中使用 Window 这样主线程就不会阻塞它(反之亦然),你可能应该使用 BackgroundWorker(如 Caius Jard suggests ),而不是让 UI 线程忙。

关于c# - 在 C# 中调用 showdialog 时出现 Threadabortexception,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56406160/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com