PDA

View Full Version : سوال: هندل کردن یک process از طریق ماژول یا کلاس



ravaei
جمعه 25 تیر 1395, 21:41 عصر
با سلام
بنده میخوام یک ماژول با کلاس داشته باشم که شامل 2 متد فرستادن دستور و استارت یک پروسس باشد که از تمامی فرم های برنامه به این دو متد دسترسی داشته باشم.
قابل ذکره که بنده 2 تا رویداد خواندن خروجی و خواندن ارور را هم که از سمت آبجکت پروسس ایجاد میشه رو هم هندل کنم .

این 2 تا متد ماژول :



Module Module1


Public Sub start(ByVal appName As String, ByVal outPut As Boolean, ByVal _error As Boolean)

Form1.myProcess = New Process
With Form1.myProcess.StartInfo
.FileName = appName
.UseShellExecute = False
.CreateNoWindow = True
.RedirectStandardInput = True
.RedirectStandardOutput = True
.RedirectStandardError = True

End With


Form1.myProcess.Start()
If (outPut) Then
Form1.myProcess.BeginErrorReadLine()
End If
If (_error) Then
Form1.myProcess.BeginOutputReadLine()
End If


End Sub




Public Sub sendCommand(ByVal command As String)

Form1.myProcess.StartInfo.RedirectStandardError = False
Form1.myProcess.StartInfo.RedirectStandardOutput = False
Form1.myProcess.StandardInput.WriteLine(command)
Form1.myProcess.StandardInput.Flush()

End Sub

End Module






و این هم کدهای داخل فرم 1 :


Public Class Form1


Public WithEvents myProcess As Process
Private Delegate Sub AppendOutputTextDelegate(ByVal text As String)









Private Sub AppendOutputText(ByVal text As String)
If TextBoxout.InvokeRequired Then
Dim myDelegate As New AppendOutputTextDelegate(AddressOf AppendOutputText)
Me.Invoke(myDelegate, text)
Else
TextBoxout.AppendText(text)
End If


End Sub


Private Sub MyProcess_ErrorDataReceived(ByVal sender As Object, ByVal e As System.Diagnostics.DataReceivedEventArgs) Handles myProcess.ErrorDataReceived


AppendOutputText(vbCrLf & "Error: " & e.Data)

End Sub


Private Sub MyProcess_OutputDataReceived(ByVal sender As Object, ByVal e As System.Diagnostics.DataReceivedEventArgs) Handles myProcess.OutputDataReceived

AppendOutputText(vbCrLf & "Output: " & e.Data)



End Sub




Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click

start("cmd.exe", True, True)
sendCommand("dir")



End Sub


End Class




همینطور که مشاهده میکنید :
در داخل ماژول من مجبور شدم به myprocess در form1 دستور بدم و در داخل فرم 1 هم رویدادهای گرفتن ارور و کرفتن خروجی رو هم باید بنویسم.

چطور میتونم تمام این کارها در داخل یک کلاس یا یک ماژول انجام بدم.

البته راهی که به ذهن من رسید اینه که یک کلاس به نام myform ایجاد کنم که از فرم ارث بری کنه و myprocess و 2 رویداد را override کنم و در زمان استفاده از متدهای ماژول
فرم 1 را نیز در وردی توابع به ماژول پاس بدم و به آبجکت process هر فرم دستورات را اعمال کنم...

gilsoft
یک شنبه 27 تیر 1395, 00:06 صبح
چطور میتونم تمام این کارها در داخل یک کلاس یا یک ماژول انجام بدم.

سلام دوست عزیز

پروژه‌ای که ضمیمه کردم .. تا حدی مشکل شما رو برطرف می‌کنه ...

فقط اینکه باید ازش ایده بگیری

قبل از اولین اجرا .. پروژه رو Build کن ...

موفق باشید .....