C#OpenFileDialog线程启动,但未显示对话框

艾哈迈德·坎·古文(Ahmet CanGüven)

我正在尝试完成我的静态Prompt类,以便能够从任何地方调用它。但是问题是无法显示对话框。我已经在使用[STAThread],这是我的代码。

public static string ShowFileDialog()
{
    string selectedPath = "";
    var t = new Thread((ThreadStart)(() =>
    {
        FolderBrowserDialog fbd = new FolderBrowserDialog();
        fbd.RootFolder = System.Environment.SpecialFolder.MyComputer;
        fbd.ShowNewFolderButton = true;
        if (fbd.ShowDialog() == DialogResult.OK)
        {
            selectedPath = fbd.SelectedPath;
        }
    }));
    t.SetApartmentState(ApartmentState.STA);
    t.Start();

    t.Join();
    return selectedPath;
}

public static class Prompt是我的提示班。我在public partial class Dashboard : Form上课的时候打电话

谢谢您的帮助。

汉斯·帕桑特

当您没有例外时,它肯定可以正常工作。但是,是的,您看不到对话框的可能性相当大。非常难看的问题,您也没有任务栏按钮。找到它的唯一方法是最小化桌面上的其他窗口。

对话框(任何对话框)必须具有所有者窗口。您应该将该所有者传递给ShowDialog(owner)方法重载。如果您未指定,它将自行寻找所有者。底层调用是GetActiveWindow()。为了解决问题,桌面窗口现在成为所有者。这不足以确保对话框窗口在最前面。

至少您必须创建该所有者窗口,现在至少具有任务栏按钮。像这样:

    using (var owner = new Form() { Width = 0, Height = 0,
        StartPosition = FormStartPosition.CenterScreen,
        Text = "Browse for Folder"}) {
        owner.Show();
        owner.BringToFront();
        FolderBrowserDialog fbd = new FolderBrowserDialog();
        fbd.RootFolder = System.Environment.SpecialFolder.MyComputer;
        fbd.ShowNewFolderButton = true;
        if (fbd.ShowDialog(owner) == DialogResult.OK) {
            selectedPath = fbd.SelectedPath;
        }
    }

仍然不能保证对话框是可见的,当用户与另一个窗口进行交互时,您不能将一个窗口推入用户的脸部。但是至少有一个任务栏按钮。

我会很犹豫地显示有关该内容的技巧,请不要使用它:

    owner.Show();
    var pid = System.Diagnostics.Process.GetCurrentProcess().Id;
    Microsoft.VisualBasic.Interaction.AppActivate(pid);

引起用户注意并使用户与UI交互的正确方法是NotifyIcon.ShowBalloonTip()。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C#显示对话框线程

来自分类Dev

C#显示对话框线程

来自分类Dev

显示但未弹出的jQuery对话框弹出窗口

来自分类Dev

WPF C#OpenFileDialog不显示网络存储

来自分类Dev

Wxpython在主机启动时显示对话框

来自分类Dev

Flutter:在启动时显示对话框

来自分类Dev

在首次启动应用程序时显示对话框

来自分类Dev

Wxpython在主机启动时显示对话框

来自分类Dev

MFC对话框错误中的C ++多线程

来自分类Dev

从C ++在Mac OSX上启动打开对话框

来自分类Dev

从C ++在Mac OSX上启动打开对话框

来自分类Dev

显示独立对话框

来自分类Dev

显示对话框片段

来自分类Dev

显示重启对话框

来自分类Dev

全屏显示对话框

来自分类Dev

更新显示的对话框

来自分类Dev

显示消息对话框

来自分类Dev

C#OpenFileDialog不显示内容,它显示文件目录

来自分类Dev

C#显示对话框在WinForms中的另一个对话框?

来自分类Dev

让线程等待对话框输入

来自分类Dev

线程不执行对话框?

来自分类Dev

带线程的对话框消息

来自分类Dev

图像打开模式对话框启动

来自分类Dev

启动断电/重启对话框的命令

来自分类Dev

Android:从对话框启动警报服务

来自分类Dev

如何在主线程上显示ANR错误对话框

来自分类Dev

如何使用AsynctTask在正在运行的线程中显示警报对话框?

来自分类Dev

从对话框中以加载的FXML作为内容启动线程时出现“不在FX应用程序线程上”错误

来自分类Dev

显示对话框并重新启动一个出现LeakedWindow错误的Activity