2015-06-01 9 views
-1

Я пытаюсь сохранить файл, используя saveFileDialog в F #. До сих пор я смотрел this post и пытался переписать этот и другой код в сети. Я также немного прочитал о saveFileDialogs на msdn.F # saveFileDialog

Я думаю, что мой код должен работать, но по какой-то причине он сбой (если я нажму продолжу в IDE, я даже получу проблеск saveFileDialog, но с неправильным фильтром типов).

Моя авария сообщение «Исключение типа„System.Threading.ThreadStateException“произошло в System.Windows.Forms.dll, но не был обработан в пользовательском коде»

и мой код:

let savefile = new SaveFileDialog() 
    savefile.FileName <- "My Sudoku.txt" 
    savefile.Filter <- "Text files (*.txt)|*.txt|All files (*.*)|*.*"; 
    savefile.InitialDirectory <- Directory.GetCurrentDirectory() 
    savefile.FilterIndex <- 1 

if savefile.ShowDialog(new Form(Text="Save", TopMost=true, Width=360, Height=390)) = System.Windows.Forms.DialogResult.OK 
             then saveFile (savefile.InitialDirectory) (savefile.FileName) (stuffToSave) 
             else printfn "Error couldn't save" 

Код на самом деле происходит в форме с именем createMode, которая начинается с async.

Async.Start(createMode observables sudokuGame) ; GUI.Create.form.ShowDialog() 
+3

Попытка сделать что-либо с помощью элементов управления WinForms в любом потоке, отличном от основного потока, предназначена для отказа. – ildjarn

+3

Я бы попробовал ['Async.SwitchToContext'] (https://msdn.microsoft.com/en-us/library/vstudio/ee353903 (v = vs.120) .aspx) - если вы посмотрите на ссылку, вы будете есть пример WinForms прямо там ... – Carsten

ответ

1

способ исправить это, что я теперь обнаружил, добавить open System к программе. И добавить

[<STAThreadAttribute>] 
    do 

до async.Start части, которая начинается нить с программой.

+1

Я не думаю, что это решит * все * вашу проблему, когда вы действительно попадете в другой поток ([см. это для объяснения этого атрибута] (https: // stackoverflow. ком/вопросы/1361033/что-делает-STAThread-делать)) – Carsten

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