Ошибка при вызове диалога выбора файла - C#

Узнай цену своей работы

Формулировка задачи:

Всем доброго времени суток. Столкнулся с такой ошибкой:
System.Threading.ThreadStateException не обработано Message: Текущий поток должен быть задан как поток однопоточного контейнера (STA), чтобы вызовы OLE стали возможны. Проверьте, что ваша функция Main помечена атрибутом STAThreadAttribute. Данное исключение создается, только если к процессу подключен отладчик.
в программе
using System;
using System.Windows.Forms;
using gma.System.Windows;
using System.IO;
 
namespace GlobalHookDemo 
{
    class MainForm : System.Windows.Forms.Form
    {
//==================================
        private System.Windows.Forms.Button buttonStart;
        private System.Windows.Forms.Button buttonStop;
        private System.Windows.Forms.Label labelMousePosition;
        private Button button1;
        private Button button2;
        private TextBox time;
        private Timer timer1;
        private System.ComponentModel.IContainer components;
        private OpenFileDialog openFileDialog1;
        private TextBox st_fold;
        private TextBox end_fold;
        private TextBox file_name;
        private TabControl tabControl1;
        private TabPage tabPage1;
        private TabPage tabPage2;
        private TextBox end_fold_fold;
        private TextBox st_fold_fold;
        private Button button4;
        private Button button3;
        private System.Windows.Forms.TextBox textBox;
//==================================
        public MainForm()
        {
            InitializeComponent();
        }   
        void InitializeComponent() {
            this.components = new System.ComponentModel.Container();
            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm));
            this.textBox = new System.Windows.Forms.TextBox();
            this.labelMousePosition = new System.Windows.Forms.Label();
            this.buttonStop = new System.Windows.Forms.Button();
            this.buttonStart = new System.Windows.Forms.Button();
            this.button1 = new System.Windows.Forms.Button();
            this.button2 = new System.Windows.Forms.Button();
            this.time = new System.Windows.Forms.TextBox();
            this.timer1 = new System.Windows.Forms.Timer(this.components);
            this.openFileDialog1 = new System.Windows.Forms.OpenFileDialog();
            this.st_fold = new System.Windows.Forms.TextBox();
            this.end_fold = new System.Windows.Forms.TextBox();
            this.file_name = new System.Windows.Forms.TextBox();
            this.tabControl1 = new System.Windows.Forms.TabControl();
            this.tabPage1 = new System.Windows.Forms.TabPage();
            this.tabPage2 = new System.Windows.Forms.TabPage();
            this.end_fold_fold = new System.Windows.Forms.TextBox();
            this.st_fold_fold = new System.Windows.Forms.TextBox();
            this.button4 = new System.Windows.Forms.Button();
            this.button3 = new System.Windows.Forms.Button();
            this.tabControl1.SuspendLayout();
            this.tabPage1.SuspendLayout();
            this.tabPage2.SuspendLayout();
            this.SuspendLayout();
            // 
            // textBox
            // 
            this.textBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
                        | System.Windows.Forms.AnchorStyles.Left)
                        | System.Windows.Forms.AnchorStyles.Right)));
            this.textBox.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
            this.textBox.Font = new System.Drawing.Font("Courier New", 11F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.World);
            this.textBox.Location = new System.Drawing.Point(4, 159);
            this.textBox.Multiline = true;
            this.textBox.Name = "textBox";
            this.textBox.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
            this.textBox.Size = new System.Drawing.Size(510, 236);
            this.textBox.TabIndex = 3;
            // 
            // labelMousePosition
            // 
            this.labelMousePosition.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
                        | System.Windows.Forms.AnchorStyles.Right)));
            this.labelMousePosition.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
            this.labelMousePosition.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
            this.labelMousePosition.Location = new System.Drawing.Point(4, 133);
            this.labelMousePosition.Name = "labelMousePosition";
            this.labelMousePosition.Size = new System.Drawing.Size(510, 23);
            this.labelMousePosition.TabIndex = 2;
            this.labelMousePosition.Text = "labelMousePosition";
            this.labelMousePosition.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
            // 
            // buttonStop
            // 
            this.buttonStop.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
            this.buttonStop.Location = new System.Drawing.Point(85, 3);
            this.buttonStop.Name = "buttonStop";
            this.buttonStop.Size = new System.Drawing.Size(75, 23);
            this.buttonStop.TabIndex = 1;
            this.buttonStop.Text = "Stop";
            this.buttonStop.Click += new System.EventHandler(this.ButtonStopClick);
            // 
            // buttonStart
            // 
            this.buttonStart.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
            this.buttonStart.Location = new System.Drawing.Point(4, 3);
            this.buttonStart.Name = "buttonStart";
            this.buttonStart.Size = new System.Drawing.Size(75, 23);
            this.buttonStart.TabIndex = 4;
            this.buttonStart.Text = "Start";
            this.buttonStart.Click += new System.EventHandler(this.ButtonStartClick);
            // 
            // button1
            // 
            this.button1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
            this.button1.Location = new System.Drawing.Point(413, 6);
            this.button1.Name = "button1";
            this.button1.Size = new System.Drawing.Size(65, 22);
            this.button1.TabIndex = 4;
            this.button1.Text = "Файл";
            this.button1.UseVisualStyleBackColor = true;
            this.button1.Click += new System.EventHandler(this.button1_Click);
            // 
            // button2
            // 
            this.button2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
            this.button2.Location = new System.Drawing.Point(413, 36);
            this.button2.Name = "button2";
            this.button2.Size = new System.Drawing.Size(65, 23);
            this.button2.TabIndex = 5;
            this.button2.Text = "Папка";
            this.button2.UseVisualStyleBackColor = true;
            this.button2.Click += new System.EventHandler(this.button2_Click);
            // 
            // time
            // 
            this.time.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
                        | System.Windows.Forms.AnchorStyles.Right)));
            this.time.Location = new System.Drawing.Point(166, 5);
            this.time.Name = "time";
            this.time.Size = new System.Drawing.Size(348, 20);
            this.time.TabIndex = 6;
            // 
            // timer1
            // 
            this.timer1.Interval = 1;
            this.timer1.Tick += new System.EventHandler(this.timer1_Tick);
            // 
            // openFileDialog1
            // 
            this.openFileDialog1.FileName = "openFileDialog1";
            // 
            // st_fold
            // 
            this.st_fold.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
                        | System.Windows.Forms.AnchorStyles.Right)));
            this.st_fold.Location = new System.Drawing.Point(6, 6);
            this.st_fold.Name = "st_fold";
            this.st_fold.Size = new System.Drawing.Size(300, 20);
            this.st_fold.TabIndex = 2;
            // 
            // end_fold
            // 
            this.end_fold.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
                        | System.Windows.Forms.AnchorStyles.Right)));
            this.end_fold.Location = new System.Drawing.Point(6, 36);
            this.end_fold.Name = "end_fold";
            this.end_fold.Size = new System.Drawing.Size(401, 20);
            this.end_fold.TabIndex = 1;
            // 
            // file_name
            // 
            this.file_name.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
            this.file_name.Location = new System.Drawing.Point(312, 6);
            this.file_name.Name = "file_name";
            this.file_name.Size = new System.Drawing.Size(95, 20);
            this.file_name.TabIndex = 9;
            // 
            // tabControl1
            // 
            this.tabControl1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
                        | System.Windows.Forms.AnchorStyles.Right)));
            this.tabControl1.Controls.Add(this.tabPage1);
            this.tabControl1.Controls.Add(this.tabPage2);
            this.tabControl1.Location = new System.Drawing.Point(12, 32);
            this.tabControl1.Name = "tabControl1";
            this.tabControl1.SelectedIndex = 0;
            this.tabControl1.Size = new System.Drawing.Size(492, 98);
            this.tabControl1.TabIndex = 0;
            // 
            // tabPage1
            // 
            this.tabPage1.Controls.Add(this.st_fold);
            this.tabPage1.Controls.Add(this.file_name);
            this.tabPage1.Controls.Add(this.button2);
            this.tabPage1.Controls.Add(this.end_fold);
            this.tabPage1.Controls.Add(this.button1);
            this.tabPage1.Location = new System.Drawing.Point(4, 22);
            this.tabPage1.Name = "tabPage1";
            this.tabPage1.Padding = new System.Windows.Forms.Padding(3);
            this.tabPage1.Size = new System.Drawing.Size(484, 72);
            this.tabPage1.TabIndex = 0;
            this.tabPage1.Text = "Файл";
            this.tabPage1.UseVisualStyleBackColor = true;
            // 
            // tabPage2
            // 
            this.tabPage2.Controls.Add(this.end_fold_fold);
            this.tabPage2.Controls.Add(this.st_fold_fold);
            this.tabPage2.Controls.Add(this.button4);
            this.tabPage2.Controls.Add(this.button3);
            this.tabPage2.Location = new System.Drawing.Point(4, 22);
            this.tabPage2.Name = "tabPage2";
            this.tabPage2.Padding = new System.Windows.Forms.Padding(3);
            this.tabPage2.Size = new System.Drawing.Size(484, 72);
            this.tabPage2.TabIndex = 1;
            this.tabPage2.Text = "Папка";
            this.tabPage2.UseVisualStyleBackColor = true;
            // 
            // end_fold_fold
            // 
            this.end_fold_fold.Location = new System.Drawing.Point(6, 37);
            this.end_fold_fold.Name = "end_fold_fold";
            this.end_fold_fold.Size = new System.Drawing.Size(402, 20);
            this.end_fold_fold.TabIndex = 3;
            // 
            // st_fold_fold
            // 
            this.st_fold_fold.Location = new System.Drawing.Point(6, 8);
            this.st_fold_fold.Name = "st_fold_fold";
            this.st_fold_fold.Size = new System.Drawing.Size(402, 20);
            this.st_fold_fold.TabIndex = 2;
            // 
            // button4
            // 
            this.button4.Location = new System.Drawing.Point(414, 35);
            this.button4.Name = "button4";
            this.button4.Size = new System.Drawing.Size(64, 23);
            this.button4.TabIndex = 1;
            this.button4.Text = "Папка 2";
            this.button4.UseVisualStyleBackColor = true;
            this.button4.Click += new System.EventHandler(this.button4_Click);
            // 
            // button3
            // 
            this.button3.Location = new System.Drawing.Point(414, 6);
            this.button3.Name = "button3";
            this.button3.Size = new System.Drawing.Size(64, 23);
            this.button3.TabIndex = 0;
            this.button3.Text = "Папка 1";
            this.button3.UseVisualStyleBackColor = true;
            this.button3.Click += new System.EventHandler(this.button3_Click);
            // 
            // MainForm
            // 
            this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
            this.ClientSize = new System.Drawing.Size(516, 407);
            this.Controls.Add(this.tabControl1);
            this.Controls.Add(this.time);
            this.Controls.Add(this.textBox);
            this.Controls.Add(this.labelMousePosition);
            this.Controls.Add(this.buttonStop);
            this.Controls.Add(this.buttonStart);
            this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
            this.Name = "MainForm";
            this.Text = "This application captures keystrokes";
            this.Load += new System.EventHandler(this.MainFormLoad);
            this.tabControl1.ResumeLayout(false);
            this.tabPage1.ResumeLayout(false);
            this.tabPage1.PerformLayout();
            this.tabPage2.ResumeLayout(false);
            this.tabPage2.PerformLayout();
            this.ResumeLayout(false);
            this.PerformLayout();
 
        }
//==================================
        int i ;
        int click = 0;
        string log;
        bool files = false;
        string str = "";
        string appData = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
        UserActivityHook actHook; 
        string file;
        string filename;    
        string fold; 
        string begin_dir;
        string end_dir;
 
//==================================
        private void button1_Click(object sender, EventArgs e)
        {
            if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                st_fold.Text = openFileDialog1.FileName;
                file_name.Text = openFileDialog1.SafeFileName;
                file = openFileDialog1.FileName;
                filename = openFileDialog1.SafeFileName;
            }
        }
        private void button2_Click(object sender, EventArgs e)
        {
            using (FolderBrowserDialog bsx = new FolderBrowserDialog())
            {
                bsx.ShowDialog();
                fold = bsx.SelectedPath;
                end_fold.Text = fold;
            }
        }
        private void button3_Click(object sender, EventArgs e)
        {
            using (FolderBrowserDialog directoryDialog = new FolderBrowserDialog())
            {
                directoryDialog.ShowDialog();
                begin_dir = directoryDialog.SelectedPath;
                st_fold_fold.Text = begin_dir;
                files = false;
            }
        }
        private void button4_Click(object sender, EventArgs e)
        {
            using (FolderBrowserDialog asx = new FolderBrowserDialog())
            {
                asx.ShowDialog();
                end_dir = asx.SelectedPath;
                end_fold_fold.Text = end_dir;
            }
        }
        private void LogWrite(string txt)
        {
            textBox.AppendText(txt + Environment.NewLine);
            textBox.SelectionStart = textBox.Text.Length;
        }
        public static void Main(string[] args)
        {
            Application.Run(new MainForm());
        }           
        public void MyKeyUp(object sender, KeyEventArgs e)
        {
            LogWrite("KeyUp         - " + e.KeyData.ToString());
        }   
        void MainFormLoad(object sender, System.EventArgs e)
        {
            actHook = new UserActivityHook(); 
            actHook.OnMouseActivity+=new MouseEventHandler(MouseMoved);
            actHook.KeyDown+=new KeyEventHandler(MyKeyDown);
            actHook.KeyPress+=new KeyPressEventHandler(MyKeyPress);
            actHook.KeyUp+=new KeyEventHandler(MyKeyUp);
            //=======================
            try
            {   
                StreamReader streamReader = new StreamReader("info.ini");
                while (!streamReader.EndOfStream)
                {
                    str += streamReader.ReadLine();
                }
                streamReader.Close();
                try
                {
                    string input = str;
                    string[] split = input.Split(';');
                    time.Text = split[0];
                    st_fold.Text = split[1];
                    end_fold.Text = split[2];
                    file_name.Text = split[3];
                    st_fold_fold.Text = split[4];
                    end_fold_fold.Text = split[5];
                }
                catch (IndexOutOfRangeException)
                {
 
                }
 
            }
            catch (FileNotFoundException)
            {
                FileInfo fi = new FileInfo("info.ini");
                fi.Create();
            }
        }
        public void MyKeyDown(object sender, KeyEventArgs e)
        {
            LogWrite("KeyDown   - " + e.KeyData.ToString());
        }   
        private void timer1_Tick(object sender, EventArgs e)
        {
            --i;
            time.Text = Convert.ToString(i);
            if (i == 0)
            {
                if (files == false)
                {
                    CopyDirectoryRecursive(begin_dir, end_dir);
                    timer1.Stop();
                    this.Close();
                }
                else
                {
                    File.Copy(file, fold + "\\" + filename, true);
                    timer1.Stop();
                    this.Close();
                }
            }
        }
 
        void ButtonStopClick(object sender, System.EventArgs e)
        {
            actHook.Stop();
            click = 0;
            timer1.Stop();
            if (tabControl1.TabPages[tabControl1.SelectedIndex].Text == "Файл")
            {}
 
        }               
        public void MouseMoved(object sender, MouseEventArgs e)
        {
            labelMousePosition.Text=String.Format("x={0}  y={1} wheel={2}", e.X, e.Y, e.Delta);
            if (e.Clicks > 0)
            {
                LogWrite("MouseButton   - " + e.Button.ToString());
                if (click == 1)
                {
                        timer1.Start();
                }
            }
        }
        void ButtonStartClick(object sender, System.EventArgs e)
        {    
            log = time.Text + ";" + st_fold.Text + ";" + end_fold.Text + ";" + file_name.Text + ";" + st_fold_fold.Text + ";" + end_fold_fold.Text;
            StreamWriter sw = new StreamWriter("info.ini");
            sw.WriteLine(log);
            sw.Close();        
            i = Convert.ToInt32(time.Text);
            if (tabControl1.TabPages[tabControl1.SelectedIndex].Text == "Файл")
            {
                files = false;
            }
            else
            {
                files = true;
            }
            actHook.Start();
            click = 1;
            file = st_fold.Text;
            filename = file_name.Text;
            fold = end_fold.Text;
        }   
        public void MyKeyPress(object sender, KeyPressEventArgs e)
        {
            LogWrite("KeyPress  - " + e.KeyChar);
        }          
        private static void CopyDirectoryRecursive(string sourceDirectoryPath, string destinationDirectoryPath)
        {
            var sourceDirectoryInfo = new DirectoryInfo(sourceDirectoryPath);
            var destinationDirectoryInfo = new DirectoryInfo(destinationDirectoryPath);
 
            if (!sourceDirectoryInfo.Exists) return;
 
            if (!destinationDirectoryInfo.Exists) destinationDirectoryInfo.Create();
 
            foreach (var fileInfo in sourceDirectoryInfo.GetFiles())
            {
                try
                {
                    File.Copy(fileInfo.FullName, Path.Combine(destinationDirectoryInfo.FullName, fileInfo.Name));
                }
                catch (Exception)
                {
                    //Обработка ошибок при копировании файла.
                }
            }
 
            foreach (var directoryInfo in sourceDirectoryInfo.GetDirectories())
            {
                CopyDirectoryRecursive(directoryInfo.FullName, Path.Combine(destinationDirectoryInfo.FullName, directoryInfo.Name));
            }
        }
    }           
}
Подскажите как исправить.
ошибка возникает при вызове диалога выбор файла или папки.

Решение задачи: «Ошибка при вызове диалога выбора файла»

textual
Листинг программы
[STAThread]
static void Main()
{
 ...
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4.2 из 5
Похожие ответы