Visual Studio 2015 Debug doesn't work in multithread application

前端 未结 7 1713
被撕碎了的回忆
被撕碎了的回忆 2021-02-03 10:15

In my project I have a heavy part of code that should be executed on a separate thread without blocking UI. When debugger hits the breakpoint inside this code, VS2015 freezes fo

相关标签:
7条回答
  • 2021-02-03 10:45

    I had a similar issue. The other answers to this question did not resolve the issue for me, but they pointed me to the right direction. Apparently I had the Release configuration selected, instead of Debug.

    0 讨论(0)
  • 2021-02-03 10:45

    I had the problem of visual studio 2008 freeze even after disabling the hosting process. What seems to be working for me is disabling address level debugging.

    (VS2008) Tools (menu) -> Options -> Debugging -> General -> (uncheck) Enable address-level Debugging.

    0 讨论(0)
  • 2021-02-03 10:49

    After i checked "use managed compatibility mode" in options-debugging-general, thread debugging seems to work.

    0 讨论(0)
  • 2021-02-03 10:58

    After annoying hours, the answer of @Haggisatonal was it for me. Thank you very much!

    The problem appears to go away when I disable the VS hosting process (Project -> Properties -> Debug -> Enable the Visual Studio hosting process).

    but

    "Tools -> Options -> Debugging -> General -> Enable property evaluation and other implicit function calls"

    like in a nother Ticket, was not the resolution for me, maybe it helps temporairly others

    0 讨论(0)
  • 2021-02-03 10:59

    I had breakpoints in 2 different threads and Visual Studio was bouncing from one to the other as I stepped through. Eventually it froze with (Not Responding) in the title bar.

    If I limited the breakpoints to just one thread, I would not experience the problem.

    0 讨论(0)
  • 2021-02-03 10:59

    I suggest that you use a combilation of a Timer and WaitHandle in your code instead of the for loop that causes high CPU usage. I made a simple change to your code to ease the CPU usage. Hope that help.

        public partial class Form1 : Form
        {
            EventWaitHandle _waitHandle ;
            System.Timers.Timer _timer; 
            public Form1()
            {
                InitializeComponent();
                _waitHandle = new EventWaitHandle(false, EventResetMode.AutoReset);
                _timer = new System.Timers.Timer();
                _timer.Interval = 100;
                _timer.Elapsed += OnTimerElapsed;
                _timer.AutoReset = true;
    
            }
    
            private void OnTimerElapsed(object sender, System.Timers.ElapsedEventArgs e)
            {
                _waitHandle.Set();
            }
    
            void FuncAsync(IProgress<int> progress)
            {
                _timer.Start();
                int percent = 0;
                while (percent <= 100)
                {
                    if (_waitHandle.WaitOne())
                    {
                        progress.Report(percent);
                        percent++;
                    }
                }
                _timer.Stop();
    
            }
            void FuncBW(BackgroundWorker worker)
            {
                _timer.Start();
                int percent = 0;
                while (percent <= 100)
                {
                    if (_waitHandle.WaitOne())
                    {
                        worker.ReportProgress(percent);
                        percent++;
                    }
                }
                _timer.Stop();
            }
    
    
    
            void FuncThread()
            {
                _timer.Start();
                int percent = 0;
                while (percent <= 100)
                {
                    if (_waitHandle.WaitOne())
                    {
                        if (this.InvokeRequired)
                        {
                            this.Invoke((Action)delegate { label1.Text = percent.ToString(); });
                        }
                        else
                        {
                            label1.Text = percent.ToString();
                        }
                        percent++;
                    }
                }
                _timer.Stop();
            }
    
    
            ... your other code
        }
    
    0 讨论(0)
提交回复
热议问题