簡體   English   中英

如果沒有Form,FolderBrowserDialog將不會顯示在單個.cs文件中

[英]FolderBrowserDialog won't show in a single .cs file without Form

我正在嘗試編寫一個程序,該程序在Windows中右鍵單擊文件時執行,然后名為“移動到”的上下文菜單功能在Windows注冊表HKEY ClASSES中執行文件。 它應該在執行時解析“%1”作為參數,以便我的程序知道文件的位置。 但是,當我編譯單個.cs文件時,FolderBrowserDialog將不會顯示。 我懷疑這是因為我在調用之前沒有初始化某種形式。 是否有可能以某種方式從單個c#文件中選擇一個文件夾而不包括Forms?

using System;
using System.IO;
using System.Reflection;
using System.Windows.Forms;


public class MoveTo : Form 
{

    public static string current_file_path;
    public static string new_file_path;
    public static string file_name;

    public static void Main(string[] args){
        if (args.Length > 0)
        {
            current_file_path = (string) args[0];
            file_name = (string) current_file_path.Replace(Path.GetDirectoryName(Environment.GetCommandLineArgs()[1]), "");
            var browser = new FolderBrowserDialog();

            if (browser.ShowDialog()==DialogResult.OK)
            {
                new_file_path = browser.SelectedPath + file_name;
            }else
            {
                Environment.Exit(1);
            }
            try
            {
                File.Move(current_file_path, new_file_path);    
            }catch(Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
        }   
    }
}

如果繞過參數檢查並嘗試在調試器中顯示FBD,使用這個確切的代碼,您將看到System.Threading.ThreadStateException:'當前線程必須設置為單線程單元(STA)模式才能進行OLE調用。 確保您的Main函數標記了STAThreadAttribute。 僅當調試器附加到進程時才會引發此異常。

根據錯誤消息,如果未附加調試器,則不會引發此異常。 在您的Main方法上放置[STAThread]屬性,就像您在任何Windows窗體應用程序中通常看到的那樣:

[STAThread]
public static void Main(string[] args)
{ 
  ...

我還建議你為你的外部if添加一個else ,如果沒有傳遞參數則顯示錯誤(否則你的應用程序將以靜默方式退出)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM