• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

Msgbox Или Messagebox.show Чтобы Не Стопорили Поток

  • Автор темы BStudio
  • Дата начала
B

BStudio

Мне нужно чтобы показывался MsgBox и поток не останавливался и не ждал от пользователя нажатия "ОК", а сразу писал в файл.

В моём случае, такой код:
Код:
	MsgBox("asdasd")
IO.File.Create(CurDir() & "\file.txt").Close()
FileOpen(1, CurDir() & "\file.txt", OpenMode.Output, OpenAccess.Write, OpenShare.Shared)
Print(1, "sadasdasdsa")
FileClose(1)

В голове есть предположение, что это можно осуществить посредством BackgroundWorker, но к сожалению, я ни разу так не делал, так что, кто может, помогите, приведите хотя бы кусочек кода. Желательно, на VB.NET. :blush:

Всем заранее большое спасибо.
 
C

CSerX

Ложешь BackgroundWorker на форму, у него есть событие DoWork на него вешаешь обработку, перед тем как вызовешь MsgBox, у BackgroundWorker вызовишь RunWorkerAsync и усё
 
B

BStudio

Ложешь BackgroundWorker на форму, у него есть событие DoWork на него вешаешь обработку, перед тем как вызовешь MsgBox, у BackgroundWorker вызовишь RunWorkerAsync и усё

:unsure:

я это знаю. я забыл упомянуть, что тип приложения Пустой проект. Т.е. ни о каких формах речи не идёт :KillMe: я тогда попробую осуществить эту затею в коде, если получится, выложу сюда =)

CSerX
, спасибо за участие :trash:
 
B

BStudio

:unsure:

Полностью рабочий, на несколько раз проверенный, оптимизированный код.

Тип проекта: Пустой проект
Среда разработки: MS Visual Studio 2010 ultimate :KillMe:
Язык: Visual Basic .NET :trash:

Код:
Imports System.IO
Imports System.ComponentModel

Module engine

Private WithEvents BgWorker As New BackgroundWorker
Private ExeCloseAllowed As Boolean = False

Private Sub backgroundWorker1_DoWork(ByVal sender As System.Object, ByVal e As DoWorkEventArgs) Handles BgWorker.DoWork
MsgBox("message")
ExeCloseAllowed = True
End Sub

Sub Main()
BgWorker.RunWorkerAsync()
On Error Resume Next
Dim f$ = CurDir() & "\result.sys"
File.Delete(f)
File.Create(f).Close()
FileOpen(1, f, OpenMode.Output, OpenAccess.Write, OpenShare.Shared)
PrintLine(1, "SUCCESS")
FileClose(1)
Do Until ExeCloseAllowed : Threading.Thread.Sleep(100)
Loop
End Sub

End Module

P.S. Модеры, закройте, пожалуйста, тему...
 
A

a0z

ExeCloseAllowed надо объявлять как volatile, иначе можно огрести проблем с оптимизацией
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!