Страница: 1 |
Страница: 1 |
Вопрос: Почему не работает?
Добавлено: 17.03.08 22:29
Автор вопроса:
RedRum
шифровальщик\расшифровальщик текста
ругается на OpenFileDialog3, грит
Current thread must be set to single thread apartment (STA) mode before OLE calls can be made. Ensure that your Main function has STAThreadAttribute marked on it. This exception is only raised if a debugger is attached to the process.
как поправить ума не приложу..
Public Class Form1
Dim thr As Threading.Thread = New Threading.Thread(AddressOf s1)
Dim thr2 As Threading.Thread = New Threading.Thread(AddressOf s2)
Public Sub s1()
Dim OpenFileDialog3 As New OpenFileDialog
OpenFileDialog3.ShowDialog()
Dim name = OpenFileDialog1.FileName
FileOpen(1, OpenFileDialog1.FileName, OpenMode.Input)
Do While Not EOF(1)
Dim A As String = LineInput(1)
RichTextBox1.Text += A + Chr(13)
Dim i = 0
For i = 0 To Len(A) - 1
RichTextBox2.Text += Chr(Asc(A(i)) + 1)
Next i
RichTextBox2.Text += Chr(13)
Loop
FileClose(1)
FileOpen(1, OpenFileDialog1.FileName, OpenMode.Output)
Print(1, RichTextBox2.Text)
FileClose(1)
End Sub
Public Sub s2()
Dim OpenFileDialog2 As New OpenFileDialog
OpenFileDialog2.ShowDialog()
Dim name = OpenFileDialog1.FileName
FileOpen(1, OpenFileDialog1.FileName, OpenMode.Input)
Do While Not EOF(1)
Dim A As String = LineInput(1)
RichTextBox1.Text += A + Chr(13)
Dim i = 0
For i = 0 To Len(A) - 1
RichTextBox2.Text += Chr(Asc(A(i)) - 1)
Next i
RichTextBox2.Text += Chr(13)
Loop
FileClose(1)
FileOpen(1, OpenFileDialog1.FileName, OpenMode.Output)
Print(1, RichTextBox2.Text)
FileClose(1)
End Sub
Public Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
thr.Start()
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
thr2.Start()
End Sub
End Class
Ответы
Всего ответов: 4
Номер ответа: 1
Автор ответа: RedRum
Вопросов: 3
Ответов: 5
Профиль | | #1
Добавлено: 17.03.08 22:31
ругается даже не на OpenFileDialog3 а просто на Любой OpenFileDialog тот что находится в потоке
Номер ответа: 2
Автор ответа: s12
Вопросов: 24
Ответов: 363
Профиль | | #2
Добавлено: 18.03.08 03:30
Не, ну я может че-то не понял, но вот нафиг эти строчки нужны???
OpenFileDialog2.ShowDialog()
А диалог вызывай в родительском потоке.
Номер ответа: 3
Автор ответа: RedRum
Вопросов: 3
Ответов: 5
Профиль | | #3
Добавлено: 18.03.08 18:30
вот я я понял что чет фигню какая то получилась.. а как ее вызвать в родительском , причем так чтоб цикл обрабатывал открытый файл в отдельном потоке нифига не понял как сделать.. OpenFileDialog2.ShowDialog() вызывает этот самый диалог выбора файла (без многопоточности всю это прекрасно работает, изначально все было в обработки события нажатия соот-щей кнопки, сейчас сейчас кнопка вызывает поток)
Номер ответа: 4
Автор ответа: s12
Вопросов: 24
Ответов: 363
Профиль | | #4
Добавлено: 19.03.08 01:26
Dim OpenFileDialog2 As New OpenFileDialog
OpenFileDialog2.ShowDialog()
А еще лучше:
OpenFileDialog2.ShowDialog()
thr.Start()
Потому что в 1м случае можешь наловишь кучу глюков.
Может все таки стоит вернутся к однопоточной программе?
И вообще, пошастай по форуму, где-то этот вопрос обсуждался.