【问题标题】:Problems running method with manual reset event手动重置事件的运行方法问题
【发布时间】:2013-02-17 15:19:22
【问题描述】:

我正在构建一个使用ManualResetEvent 的方法,但是在我启动WaitOne 方法后我无法让它运行。这是我的方法代码。代码运行代码,直到它运行到wait.WaitOne() 调用。谢谢!!

            var wait = new ManualResetEvent(false);
            Color tmpColor = new Color();
            MouseEventHandler tmpHandler = null;

            ThreadPool.QueueUserWorkItem(delegate
            {
                Debug.WriteLine("Adding MouseEventHandler..");
                tmpHandler = new MouseEventHandler(
                   (sender, e) =>
                   {
                       if (e.Button == MouseButtons.Left)
                       {
                           Bitmap tmpImage = new Bitmap(imgBox.Image);
                           tmpColor = tmpImage.GetPixel(e.X, e.Y);
                           Debug.WriteLine("Testing..");
                       }
                       else
                       {
                           Debug.WriteLine("Closing..");
                           this.Close();
                       }
                       wait.Set();
                   }
                );

                imgBox.MouseClick += tmpHandler;
            });


            Debug.WriteLine("Waiting..");

            wait.WaitOne();
            Debug.WriteLine("Running..");

【问题讨论】:

  • 这是预期的行为。你期待什么?
  • 我使用了这个网站上提出的问题的示例。 Ofcource我无法再次找到特定页面。但是在问题的答案中出现了这个解决方案,并通过它对他有用的原始海报的评论来寻找。所以我认为我做错了什么。但是@leppie 你有一个可能的解决方案,让我得到我想要完成的工作结果吗?谢谢

标签: c# manualresetevent


【解决方案1】:

看起来你阻塞了主线程。这会阻止事件处理程序执行,因此您的 Set 方法永远不会被调用。

【讨论】:

  • 这取决于您真正想要完成的任务。你为什么要阻塞主线程?你可以异步而不是同步阻塞吗?
  • 我想要完成的是该方法在返回颜色之前等待鼠标单击。我不知道实现这一点的最佳方法。我想知道你或其他人是否知道等待让它工作。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-11
相关资源
最近更新 更多