نمایش نتایج 1 تا 9 از 9

نام تاپیک: سوال در مورد thread ها

  1. #1

    سوال در مورد thread ها

    با سلام .
    (بستن main thread از يه thread ايجاد شده)
    من قبلا از داخل برنامه يه پروسيجر رو به وسيله thread اجرا مي کردم. تو پراسيجر قفل برنامه رو چک مي کرد اگر هر مشکلي داشت خط application.Exit و بعد يه messagebox مي دادم که قفل وصل نيست. (برنامه بسته مي شد و يه پيغام رو صفحه مي موند). ولي الان بدون اينکه تغييري تو کد داده باشم به محض application.exit اجرا مي شه کل برنامه بسته مي شه و به messagebox نمي رسه. اگر هم بخوام بعد از messagebox بذارم تا موقعي که کاربر ok نکنه برنامه بسته نمي شه. اينم بگم چون پروسه چک کردن قفل طولاني هستش حتما بايد thread داشته باشم.
    لطفا يه راهنماي بدين چجوري ميشه به همون حالت اول برگشت يا چه تغييري بايد بدم.
    تشکر
    آخرین ویرایش به وسیله yasser_beiraghi : یک شنبه 12 خرداد 1392 در 12:42 عصر

  2. #2

    نقل قول: سوال در مورد thread ها

    اگه MessageBox بعد از Application.Exit باشه که نمایش داده نمیشه.
    کدت رو بذار.

  3. #3

    نقل قول: سوال در مورد 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 داده مي شد و بعد از کليک کاربر برنامه کلا بسته مي شد.
    از صبح درگيرشم. لطفا يه راهنمايي بکنين...

  4. #4

    نقل قول: سوال در مورد thread ها

    SetApartmentState رو کامنت کن و messageBox رو بیار قبل از App.Exit.

  5. #5

    نقل قول: سوال در مورد thread ها

    SetApartmentState رو آزمايش کردم. messagebox هم قبل از app.exit باشه تا کاربر کليک نکنه برنامه باز مي مونه. چون message از يه thread ديگست ميشه باکس رو گذاشتش کنار و از برنامه استفاده کرد. توضيح داده بودم...

  6. #6

    نقل قول: سوال در مورد thread ها

    چطوري ميشه از خود ويندوز يه messagebox باز کرد؟ يعني از vb نباشه. شايد بشه اين مشکل حل کرد.آخه به نظر کل مساله خيلي ساده مياد ولي نمي دونم چرا اينجور گره خورده...

  7. #7
    کاربر دائمی
    تاریخ عضویت
    شهریور 1389
    محل زندگی
    م.هد
    پست
    191

    نقل قول: سوال در مورد 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

  8. #8

    نقل قول: سوال در مورد thread ها

    ميشه کدتون رو کمي توضيح بدين چيکاري انجام ميده ؟

  9. #9
    کاربر دائمی
    تاریخ عضویت
    شهریور 1389
    محل زندگی
    م.هد
    پست
    191

    نقل قول: سوال در مورد 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

    در اینجام که گفتم موقع بسته شدن فرم (دقیقا قبل بسته شدن) فرامین انجام شن.

تاپیک های مشابه

  1. چند سوال در مورد thread ها
    نوشته شده توسط .مهدی فهمیده غلامی. در بخش C#‎‎
    پاسخ: 12
    آخرین پست: یک شنبه 14 دی 1393, 15:28 عصر
  2. سوال در مورد thread
    نوشته شده توسط mhs5862 در بخش C#‎‎
    پاسخ: 7
    آخرین پست: دوشنبه 12 تیر 1391, 13:49 عصر
  3. سوال در مورد thread
    نوشته شده توسط g2eenday در بخش C#‎‎
    پاسخ: 2
    آخرین پست: دوشنبه 14 دی 1388, 16:55 عصر
  4. سوال در مورد Thread در دلفی
    نوشته شده توسط shahram.sys در بخش مباحث عمومی دلفی و پاسکال
    پاسخ: 3
    آخرین پست: سه شنبه 20 اسفند 1387, 11:27 صبح
  5. سوال در مورد threads
    نوشته شده توسط bijan.mardomi در بخش برنامه‌نویسی جاوا
    پاسخ: 4
    آخرین پست: دوشنبه 21 فروردین 1385, 21:42 عصر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •