PDA

View Full Version : سوال: هنگ کردن نرم افزار به هنگام کار در بک گرند



ILYA20
یک شنبه 23 مهر 1396, 19:30 عصر
با سلام و درود خدمت دوستان عزیز

بنده از دستور زیر برای رایت کرد فایل رو دستگاه اندرویدی در وی بی دات نت استفاده میکنم


TextBox1.AppendText(Environment.NewLine & Fastboot.ExecuteFastbootCommand(Fastboot.FormFastb ootCommand("flash boot", textboxboot.Text)))



عملیات رایت رو انجام میده ولی تا زمان رایت ، نرم افزار هنگ میمونه بعد از رایت خروجی کار رو روی TEXTBOX نشون میده و نرم افزار از حالت هنگ خارج میشه ...

چطور میتونیم کاری کنیم وقتی که نرم افزار در حین کار هست هنگ نباشه و عملیات کار را روی TEXTBOX چاپ کنه ؟

من این سوال رو از دوست هندیم پرسیدم گفت این رو توی گوگل جستجو کن :

Kpstv, [۱۵.۱۰.۱۷ ۱۵:۲۹]
Umm add an event handler to capture real time output


Kpstv, [۱۵.۱۰.۱۷ ۱۵:۲۹]
Searvj on google


ILYA20, [۱۵.۱۰.۱۷ ۱۵:۳۰]
excuse me
I really did not understand


Kpstv, [۱۵.۱۰.۱۷ ۱۵:۳۱]
Search on Google 'how to capture real time output of process using event handler VB'

راهنمایی لطفا

hamidrezax1
یک شنبه 23 مهر 1396, 20:15 عصر
اگر شما در محیط ویژوال استادیو کار میکنید میتونید این دستور رو درون BackgroundWorker بنویسید یا با Threading این کار رو انجام بدین.البته نظرات دوستان قطعا بهتر خواهد بود

ILYA20
یک شنبه 23 مهر 1396, 20:50 عصر
اگر شما در محیط ویژوال استادیو کار میکنید میتونید این دستور رو درون BackgroundWorker بنویسید یا با Threading این کار رو انجام بدین.البته نظرات دوستان قطعا بهتر خواهد بود

ممنون عزیز
بله بنده ویژوال استادیو کار میکنم
میتونید یک مثال بزنید

hamidrezax1
یک شنبه 23 مهر 1396, 22:26 عصر
دوست عزیز در فرمت دو عدد باتن قرار بده و دو لیبل به مقدارشون تکست اونها صفر باشه اونوقت این دستورات کپی کن
Public Class Form1 Dim a As New Threading.Thread(AddressOf H1)
Dim i As Integer
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
CheckForIllegalCrossThreadCalls = False
a.Start()
End Sub
Private Sub H1()




For i = Me.Label1.Text To 100000
Me.Label1.Text = i
If Me.Label2.Text = 2 Then
MsgBox("سلام")
Me.Label2.Text = 0
End If


Application.DoEvents()
Next




End Sub


Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Me.Label2.Text = 2


End Sub
End Class
در دستورات بالا اول یک ترد معرفی کردم تا کاری رو که میخوای انجام بدی بدون وقفه درون اون ترد انجام بشه همچنین در زمان اجرا فرمت از حالت هنگی خارج میشه و با کلیک بر روی باتن دوم میتونی حتی این عملیات رو متوقف کنی
این برای الهام گرفتن می باشد
موفق و پیروز باشید

ILYA20
دوشنبه 24 مهر 1396, 09:48 صبح
ببخشید دوست عزیز موضوع کمی برام گنگ شد (ما که تازه کاریم :لبخند:)

تو پروژه ما نیازی به لیبل نیست شما فرض کنید یک دکمه هست که آدرس فایل را از تکست باکس میگیره و عملیات رایت فایل را روی دستگاه انجام میده از دستور شما سر در نیاوردم و نتونستم به عنوان مثال هم ازش بهره ببرم

336699
دوشنبه 24 مهر 1396, 10:00 صبح
ببخشید دوست عزیز موضوع کمی برام گنگ شد (ما که تازه کاریم :لبخند:)

تو پروژه ما نیازی به لیبل نیست شما فرض کنید یک دکمه هست که آدرس فایل را از تکست باکس میگیره و عملیات رایت فایل را روی دستگاه انجام میده از دستور شما سر در نیاوردم و نتونستم به عنوان مثال هم ازش بهره ببرم


سلام
شما سورس پروژه رو ارسال کن ، تا راحت تر بشه راهنمایی کرد.

اگه ما با فرضیات خودمون بخواهیم مثال بزنیم ، موضوع گنگ میشه :گیج:

ILYA20
دوشنبه 24 مهر 1396, 10:27 صبح
سلام
شما سورس پروژه رو ارسال کن ، تا راحت تر بشه راهنمایی کرد.

اگه ما با فرضیات خودمون بخواهیم مثال بزنیم ، موضوع گنگ میشه :گیج:

بفرمایید



Private Sub Button11_Click(sender As Object, e As EventArgs) Handles Button11.Click
TextBox1.Clear()
If PictureBox1.BackColor = Color.GreenYellow Then
If Trim(TextBoxsideload.Text).Length > 0 Then
TextBox1.AppendText(Environment.NewLine & Adb.ExecuteAdbCommand(Adb.FormAdbCommand("sideload", TextBoxsideload.Text)))

336699
دوشنبه 24 مهر 1396, 12:43 عصر
بفرمایید



Private Sub Button11_Click(sender As Object, e As EventArgs) Handles Button11.Click
TextBox1.Clear()
If PictureBox1.BackColor = Color.GreenYellow Then
If Trim(TextBoxsideload.Text).Length > 0 Then
TextBox1.AppendText(Environment.NewLine & Adb.ExecuteAdbCommand(Adb.FormAdbCommand("sideload", TextBoxsideload.Text)))


یعنی کل برنامه شما همین سه خطه

کل پروژه رو zip کنید بفرستید .

در ضمن بسته به اینکه ورژن دانت نت مورد استفاده چند هستش ، کدها متفاوت خواهد بود.

ILYA20
دوشنبه 24 مهر 1396, 13:00 عصر
یعنی کل برنامه شما همین سه خطه

کل پروژه رو zip کنید بفرستید .

در ضمن بسته به اینکه ورژن دانت نت مورد استفاده چند هستش ، کدها متفاوت خواهد بود.

به عنوان نمونه کاملش رو جدا ایجاد کردم
خدمت شما



Imports System.IO
Imports System.IO.Path
Imports System.Threading.Tasks
Imports System.Diagnostics
Imports System.Net
Imports System.ComponentModel
Imports RegawMOD.Android
Public Class Form1
Dim android As AndroidController
Dim device As Device
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
OpenFileDialog1.FileName = "Select flashable.zip File"
OpenFileDialog1.Filter = "Zip File|*.zip"
If OpenFileDialog1.ShowDialog = DialogResult.OK Then
TextBox2.Text = OpenFileDialog1.FileName
'Me.TextBoxsideload.Text = Me.TextBoxsideload.Text.Replace(" ", "")
TextBox2.Enabled = True
End If
End Sub


Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
TextBox1.Clear()
If Trim(TextBox2.Text).Length > 0 Then
TextBox1.AppendText(Environment.NewLine & Adb.ExecuteAdbCommand(Adb.FormAdbCommand("sideload", TextBox2.Text)))
Else
TextBox1.AppendText(Environment.NewLine & "You have not selected a file. Please select a file then try again")
End If
End Sub
End Class




متاسفانه نمیتونیم بسته رو اپلود کنیم برای تست و راه اندازی الگوریتم هامون روی دستگاه خیلی وقت گذاشتیم :بوس:

hamidrezax1
دوشنبه 24 مهر 1396, 17:44 عصر
Dim a As New Threading.Thread(AddressOf H1) Dim i As Integer
Private Sub H1()
TextBox1.AppendText(Environment.NewLine & Adb.ExecuteAdbCommand(Adb.FormAdbCommand("sideload ", TextBox2.Text)))
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
TextBox1.Clear()
If Trim(TextBox2.Text).Length > 0 Then


CheckForIllegalCrossThreadCalls = False
a.Start()
Else
TextBox1.AppendText(Environment.NewLine & "You have not selected a file. Please select a file then try again")
End If
End Sub

ILYA20
دوشنبه 24 مهر 1396, 21:41 عصر
Dim a As New Threading.Thread(AddressOf H1) Dim i As Integer
Private Sub H1()
TextBox1.AppendText(Environment.NewLine & Adb.ExecuteAdbCommand(Adb.FormAdbCommand("sideload ", TextBox2.Text)))
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
TextBox1.Clear()
If Trim(TextBox2.Text).Length > 0 Then


CheckForIllegalCrossThreadCalls = False
a.Start()
Else
TextBox1.AppendText(Environment.NewLine & "You have not selected a file. Please select a file then try again")
End If
End Sub

با تشکر از شما عزیز


مشکل حل شد

ILYA20
شنبه 06 آبان 1396, 14:20 عصر
دوستان عزیز این دستور یک مشکلی داره

اینکه بعد از یک بار نمیشه دوباره استفادش کرد باید نرم افزار دوباره اجرا بشه تا کار کنه

بعد از اتمام پروسه Thread اگر بخوابم دوباره دستور را با استفاده از دکمه اجرا کنیم برای پروسه خطا میگیره

من فکر میکنم بعد از استارت Thread اجرا باقی میمونه به همین خاطر برای استارت آن خطا میگیره ... چطوری میشه بعد از اتمام پروسه thread اون رو بست ؟

hamidrezax1
شنبه 06 آبان 1396, 18:01 عصر
سلام دوست عزیز در خصوص پروسه کاری برنامه تون یکم توضیح میدین
منظورم اینه که یه پروسه از اول تا آخر اجرا میشه و نیاز هست مجددا اجرا بشه یا بایستی یه وقفه در برنامه صورت بگیره؟
لطفا توضیح بدین تا بشه راهنمایی کرد

ILYA20
شنبه 06 آبان 1396, 18:51 عصر
سلام دوست عزیز در خصوص پروسه کاری برنامه تون یکم توضیح میدین
منظورم اینه که یه پروسه از اول تا آخر اجرا میشه و نیاز هست مجددا اجرا بشه یا بایستی یه وقفه در برنامه صورت بگیره؟
لطفا توضیح بدین تا بشه راهنمایی کرد

ممنون از شما .

فرض کنید یک دکمه به فرم تعریف کردیم که با کلیک روی اون thread اجرا میشه و کارشو انجام میده

برای بار اول که کلیک کردیم هیچ مشکلی نداره thread اجرا میشه و کارشو میکنه

اما بعد از اتمام پروسه thread ... بخوایم دوباره کلیک کنیم تا thread دوباره کاری که تعریف کردیم را انجام بده خط thread1.start() خطا میگیره و کار نمیکنه و باید نرم افزار را ببندیم و دوباره باز کنیم تا بتونیم ازش استفاده کنیم

hamidrezax1
شنبه 06 آبان 1396, 19:30 عصر
منظور من اینه که این کلیک زمانش مشخصه یا نه؟؟؟

ILYA20
شنبه 06 آبان 1396, 20:12 عصر
منظور من اینه که این کلیک زمانش مشخصه یا نه؟؟؟

خیر
مثلا کاربر به دلخواه میخواد بعد از انجام اولین کار دوباره اینکارو انجام بده خب اونوقت به مشکل برمیخوره

hamidrezax1
شنبه 06 آبان 1396, 21:52 عصر
دوست عزیز معمولا از ترد برای دستورات یکبار اجرا و یا زمانی که نیاز دستوری در یک ترد از سی پی یو انجام بشه استفاده میشه تا بقیه ترد ها بتونن کارهای دیگه رو انجام بدن.توی این دستورات میشه وقفه ایجاد کرد ولی فراخوانی مجدد بعید بدونم.پیشنهاد میکنم شما هم مثل برنامه قدرتمند نرو پس از هر بار رایت سی دی برنامه رو بسته و مجددا اجرا نمایید.حتی توی یک فرم که نیاز نباشه کل برنامه رو ببندید
موفق باشید

ILYA20
یک شنبه 07 آبان 1396, 22:14 عصر
دوست عزیز معمولا از ترد برای دستورات یکبار اجرا و یا زمانی که نیاز دستوری در یک ترد از سی پی یو انجام بشه استفاده میشه تا بقیه ترد ها بتونن کارهای دیگه رو انجام بدن.توی این دستورات میشه وقفه ایجاد کرد ولی فراخوانی مجدد بعید بدونم.پیشنهاد میکنم شما هم مثل برنامه قدرتمند نرو پس از هر بار رایت سی دی برنامه رو بسته و مجددا اجرا نمایید.حتی توی یک فرم که نیاز نباشه کل برنامه رو ببندید
موفق باشید

ابزار ما یک ابزار عمومی هست و همتای ابزار ما تو اینترنت زیاده این واقعا کمی مسخره میشه برای تکرار یک کاری دوباره نرم افزار نیاز به باز و بسته شدن داشته باشه ...

هنگی نرم افزار مهم نیست از backgroundworker استفاده میکنم و چون بکگرند ورکر خروجی کار رو روی تکست باکس چاپ نمیکنه برای بک گرند ورکر از thread استفاده کردم این thread هم این مشکل رو داره

جز thread از گزینه دیگری میتونیم استفاده کنیم؟