نقل قول: سوال در مورد thread ها
اگه MessageBox بعد از Application.Exit باشه که نمایش داده نمیشه.
کدت رو بذار.
نقل قول: سوال در مورد thread ها
داخل procedure اصلي اين کد
Dim Th As New System.Threading.Thread(AddressOf Check)
Th.SetApartmentState(Threading.ApartmentState.STA)
Th.IsBackground = True
Th.Start()
توي procedure دوم اين کد
Public Sub Check()
' check lock code
If lockNotFound then
application.Exit
messageBox.Show("قفل يافت نشد")
End
End If
End Sub
قبلا اين کد کار مي کرد و مشکلي نداشت. main thread بسته مي شد و بعد messagebox داده مي شد و بعد از کليک کاربر برنامه کلا بسته مي شد.
از صبح درگيرشم. لطفا يه راهنمايي بکنين...
نقل قول: سوال در مورد thread ها
SetApartmentState رو کامنت کن و messageBox رو بیار قبل از App.Exit.
نقل قول: سوال در مورد thread ها
SetApartmentState رو آزمايش کردم. messagebox هم قبل از app.exit باشه تا کاربر کليک نکنه برنامه باز مي مونه. چون message از يه thread ديگست ميشه باکس رو گذاشتش کنار و از برنامه استفاده کرد. توضيح داده بودم...
نقل قول: سوال در مورد thread ها
چطوري ميشه از خود ويندوز يه messagebox باز کرد؟ يعني از vb نباشه. شايد بشه اين مشکل حل کرد.آخه به نظر کل مساله خيلي ساده مياد ولي نمي دونم چرا اينجور گره خورده...
نقل قول: سوال در مورد thread ها
سلام
اگه درست متوجه شده باشم .
Dim Th As New System.Threading.Thread(AddressOf Check)
Th.SetApartmentState(Threading.ApartmentState.STA)
Th.IsBackground = True
Th.Start()
و قسمت تغییر کرده :
Public Sub Check()
If True Then
Application.Exit()
End If
End Sub
Private Sub hd()
If Me.InvokeRequired Then
Me.Invoke(New MethodInvoker(AddressOf hd))
Else
Me.Hide()
End If
End Sub
Private Sub Form1_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing
hd()
MsgBox("TEST")
End Sub
نقل قول: سوال در مورد thread ها
ميشه کدتون رو کمي توضيح بدين چيکاري انجام ميده ؟
نقل قول: سوال در مورد thread ها
Public Sub Check()
If True Then
Application.Exit()
End If
End Sub
اینجا که کد خودتونه و من فقط End رو برداشتم چون اون کل برنامرو فورسکلوز میکمه. و من فقط برنامرو بستم.
Private Sub hd()
If Me.InvokeRequired Then
Me.Invoke(New MethodInvoker(AddressOf hd))
Else
Me.Hide()
End If
End Sub
در اینجا در خواست کنند رو چک کردم چون باید با نخ اصلی یا (Main Thread) کد Me.hide یا Me.Enabled = False به اون احتیاج داره.
If Me.InvokeRequired Then
اینجا چک میکنیم نخ اصلی اگه مشغوله و وقتی نیست چی کار کنه. (مقدار True مشغوله)
Me.Invoke(New MethodInvoker(AddressOf hd))
در اینجام ما با نخ اصلی درخواست و دباری انجام میدیم که اگه آرگومان داشتی این طوری هم میتونی بنویسیش.
Me.Invoke(New MethodInvoker(AddressOf hd), arg)
--------------------------------------------
Private Sub Form1_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing
hd()
MsgBox("TEST")
End Sub
در اینجام که گفتم موقع بسته شدن فرم (دقیقا قبل بسته شدن) فرامین انجام شن.