2010-11-15 5 views
1

Это мой код по нажатию кнопки SAVE:Ошибка OpenFileDialog?

OpenFileDialog myOpenfileDialog = new OpenFileDialog(); 
     myOpenfileDialog.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*"; 
     myOpenfileDialog.FilterIndex = 2; 
     myOpenfileDialog.RestoreDirectory = true; 

     if (myOpenfileDialog.ShowDialog() == DialogResult.OK) 
     { 
      FileUploadData.SaveAs(myOpenfileDialog.FileName);//my file upload control taking the path to save the file to the selected location 
     } 

я получаю это исключение:

Текущего поток должен быть установлен в одной квартире нити режима (STA) перед OLE вызовов может быть сделан , Убедитесь, что ваша основная функция имеет STAThreadAttribute, отмеченный на нем. Это исключение возникает только в том случае, если к процессу прикреплен отладчик. это threadStateException

+0

Вы помечено вопрос с asp.net * и * WinForms, но без выяснения, является ли это веб-приложение, где вы каким-то образом пытаясь использовать элементы управления Windows Forms или приложение Windows Forms. Пожалуйста, добавьте больше деталей к вопросу. –

+0

Это приложение asp.net только там, где я использую System.Windows.Forms, чтобы использовать класс OpenFileDialog – NayeemKhan

+1

Проблема в том, что вы не можете. Winforms не для ASP.NET, а для приложений Winforms. –

ответ

4

Ну, сообщение кажется мне достаточно понятным - вам нужно использовать поток STA. Если вы пишете приложение Windows Forms, вы делаете это, убедившись, что ваш метод Main украшен атрибутом, как это:

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

Если вы пишете приложение ASP.NET, вы не должны прежде всего, пытаться использовать элемент управления Windows Forms в вашем коде. Я упоминаю об этом, потому что вы отметили свой вопрос иwinforms и asp.net - вы не должны смешивать код для двух.

+0

@Jon: Ты продолжаешь избивать меня ответами, я ухожу отсюда ... вижу тебя в твиттере. – ace

+0

@Jon: Это приложение asp.net, а не выигрышная форма. Я использовал System.Windows.Forms в своем приложении, чтобы я мог получить доступ к классу OpenFileDialog и использовать его для поиска местоположения для сохранения файла. – NayeemKhan

+2

@NayeemKhan: не смешивать. Какова цель использования OpenFileDialog в первую очередь? Возможно, вы должны спросить, как я могу реализовать функциональность реализации класса OpenFileDialog в asp.net. – deostroll

1

Ваш Исключение довольно очевидно, просто отметьте Основной метод с STAThread Атрибут

EDIT:

Учитывая, что это приложение ASP.NET, то вам нужно использовать следующее в вашем ASPX страницу, чтобы показать файл открытого вид диалогового окна, чтобы позволить пользователю выбрать файл, я предполагаю, что это то, что ваши намерения:

<input type=file name="fileToUpload"> 

    OR 

<asp:FileUpload ID="FileUpload1" runat="server" /> 

Более подробную информацию об управлении FileUpload: http://msdn.microsoft.com/en-us/library/aa479405.aspx

+0

Это приложение ASP.NET. Нет никакого основного() в смысле winforms. –

+1

В приложении ASP.NET нет пользы OpenFileDialog, поэтому он понял его приложение winform. – ace

+0

Уважаемый Все, это приложение asp.net, где я использую System.Windows.Forms, чтобы я мог использовать класс OpenFileDialog. – NayeemKhan

0

Он не может использоваться для ASP.NET. Только для Winforms.
Только Winforms могут использовать модель однопоточной квартиры.

Смежные вопросы