Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • Home
  • SEARCH
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 6595999
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 25, 20262026-05-25T18:00:51+00:00 2026-05-25T18:00:51+00:00

I need to do this in order to solve a deadlock. My Windows Forms

  • 0

I need to do this in order to solve a deadlock.
My Windows Forms Control has a reference to a C++/CLI class which wraps a C++ native class. The native class makes callbacks to the C++/CLI class, which maps them to events handled by the form. These callbacks are called from a thread which runs all the time.

When I want to dispose the control, I unregister all events, so that the native class can’t call back anymore. Once that’s done, I dispose the C++/CLI wrapper, which in turn destroys the native class. In the native class destructor, I signal the thread to end using a Windows event, and wait indefinitely for the thread to end.

However, if the thread was in the middle of a callback when the disposal starts, he might be stopped in a Control.Invoke, and deadlock ensues. Hence the title question. Is this possible? If it were so, I could proceed this way:

  • Unregister all events (native thread won’t be able to call back anymore)
  • Wait for all pending .Invokes to finish
  • Dispose C++/CLI wrapper
    • Destroy C++ native class
      • Signal thread to end
      • Wait for thread to end (can’t deadlock with an Invoke since all of those finished and no more of them could have been fired since events were unregistered)
  • Bliss

I’m open to other suggestions for solving this problem

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-25T18:00:52+00:00Added an answer on May 25, 2026 at 6:00 pm

    There is no possibility of responding to the form closing event and wait for the thread to finish. There’s an unsolvable threading race condition. And very good odds for deadlock, DoEvents would break it but is too ugly.

    Implement the FormClosing event and tell the class to stop running its thread. And cancel the close. The thread should raise an event just before it exits. Use BeginInvoke() in the event handler to marshal that call to the main thread.

    Now you have a guarantee that all invokes are completed since they are ordered. Furthermore, you have a guarantee that the thread can no longer generate any more events so no more invokes are coming and it is safe to unsubscribe the events (not actually necessary). Set a flag that a real close is now possible and call Close() to actually close the form.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I need to position this update button on www.euroworker.no/order (you'll have to add an
I need to change the order of headers, I'm using this: HttpWebRequest request =
I need this for calling a C function from Java class (JNI) and I
I need this because the constructor in the superclass is calling a method which
I need to solve this algorithm problem. In the diagram, there are many rows
I need this for some animation effects and i remember there is a window
I need this roadmap of a Hibernate managed object instance. First, I create an
So from this string: name[id] I need this: id I used str.split ('[]'), but
All I need this for is strcpy(). I want to see whether the first
I don't need this declaration because it only makes my code big and unreadable.

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.