[英]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.