Вызвать через консоль MyWinForm.exe и передать туда параметр

--__Александр__--
Дата: 24.04.2014 20:17:17
Добрый вечер. В WinForms и .Net не силен, так что не судите строго.

Что есть.
Я при посильной поддержке гугла создал винформу, которая запускает бесконечный прогресс бар и в асинхронном режиме запускает другой процесс(джоб на скл сервере). Когда джоб отрабатывает, он возвращает параметр и я форму закрываю.
Винформу буду вызывать консольно.

Задача. Так как эта форма будет вызываться для разных джобов, мне нужно научится как-то вызывать ее с параметром(из консоли).
То есть необходимо, во-первых str сделать параметром формы, а во вторых вызывать эту форму с разными значениями переменной.

Подскажите, как это можно реализовать. Спасибо.

Мой код выглдяит примерно так:
Imports SQLServerJobClass
Imports System.Windows.Forms

Public Class Form_ExecLongProcess
    Inherits Form
    Private Sub LongProcess_Load(ByVal sender As System.Object, _
                                 ByVal e As System.EventArgs) _
                                 Handles MyBase.Load
        With ProgressBar1
            .Style = ProgressBarStyle.Marquee
            .MarqueeAnimationSpeed = 100
        End With

        Dim str As String = "Job_Load_task1"
        ProgressBar1.Visible = True
        bgw_Process.RunWorkerAsync(str)

    End Sub

    Private Sub bgw_Process_DoWork(ByVal sender As System.Object, _
                                   ByVal e As System.ComponentModel.DoWorkEventArgs) _
                                   Handles bgw_Process.DoWork

        Dim args As String = e.Argument
        Dim JobStatus As Integer
        Dim JobMessage As String = ""
        Dim obj As SQLServerJobClass.SQLServerJobClass = New SQLServerJobClass.SQLServerJobClass
        Dim FormWaitProgressbar As cppUpload_QORT_data.Form_ExecLongProcess = New Form_ExecLongProcess

        JobStatus = obj.Run(args)
        If JobStatus = 1 Then
            JobMessage = "succeeded!"
        Else
            JobMessage = "failed!"
        End If
        MsgBox(JobMessage, 0, "Upload data")
        Me.Close()
    End Sub
    Private Sub bgw_Process_RunWorkerCompleted(ByVal sender As Object, _
                                               ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) _
                                               Handles bgw_Process.RunWorkerCompleted
        ProgressBar1.Visible = False
    End Sub

End Class




-----------------
open your mind
buser
Дата: 24.04.2014 21:37:00
bazile
Дата: 24.04.2014 22:34:56
--__Александр__--, аргументы командной строки можно получить из коллекции My.Application.CommandLineArgs. Обработать можно прямо в функции LongProcess_Load:
Private Sub LongProcess_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

	If My.Application.CommandLineArgs.Count = 0 Then
		' Аргументы командной строки не были переданы
		Return
	End If

	Dim str As String = My.Application.CommandLineArgs(0)

	With ProgressBar1
		.Style = ProgressBarStyle.Marquee
		.MarqueeAnimationSpeed = 100
	End With

	ProgressBar1.Visible = True
	bgw_Process.RunWorkerAsync(str)

End Sub
--__Александр__--
Дата: 25.04.2014 09:50:48
bazile,

Спасибо, за подробный ответ, работает )).
bazile
Дата: 25.04.2014 14:18:16
--__Александр__--, пожалуйста. Имей только в виду что это неудачное решение из-за того что анализ аргументов командной строки спрятан в private функции. Лучшим решением было бы передавать его конструктору формы из функции Main. К сожалению VB.NET "прячет" функцию Main и чтобы её вернуть придется отключить, неплохой в общем-то, application framework. Хотя можно еще переопределить метод OnCreateMainForm и там сделать анализ и передачу параметра.