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

Тема в разделе ".NET", создана пользователем BStudio, 6 окт 2011.

  1. BStudio

    BStudio Гость

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

    В моём случае, такой код:
    Код (LotusScript):
        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:

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

    CSerX Гость

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

    BStudio Гость

    :unsure:

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

    CSerX
    , спасибо за участие :trash:
     
  4. BStudio

    BStudio Гость

    :unsure:

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

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

    Код (LotusScript):
    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. Модеры, закройте, пожалуйста, тему...
     
  5. a0z

    a0z Well-Known Member

    Регистрация:
    15 мар 2011
    Сообщения:
    109
    Симпатии:
    0
    ExeCloseAllowed надо объявлять как volatile, иначе можно огрести проблем с оптимизацией
     
Загрузка...

Поделиться этой страницей