日期:2014-05-16  浏览次数:21022 次

程序运行时,窗口无法响应任何操作

        bool stop = true;
        private void 任意角旋转ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Graphics g = panel1.CreateGraphics();
            TextureBrush bru = new TextureBrush(m_bitmap);
            while (stop)
            {
                bru.RotateTransform(2);
                g.FillRectangle(bru, 0, 0, m_bitmap.Width, m_bitmap.Height);
                System.Threading.Thread.Sleep(100);
            }
        }
就是这段代码,我是想让图片在控件内不停地旋转,结果图片运动的时候整个窗口都没有办法操作,只能通过任务管理器来强制关闭,我试过把它放进另一个线程里,但编译器显示m_bitmap正在被使用,求教该如何处理?
------解决方案--------------------
m_bitmap = (Bitmap)Bitmap.FromFile(file.FileName, false); 
改成
Image img = Bitmap.FromFile(file.FileName, false);
m_bitmap = new Bitmap(img);
至少在我本地的vs2010里运行正常,楼主可以试下
------解决方案--------------------
顺便说下,那个while循环需要放到新线程里去执行
------解决方案--------------------
  while (stop)这理造成了 你还是要开一个线程来做要不然会卡死UI线程
            {
                bru.RotateTransform(2);
                g.FillRectangle(bru, 0, 0, m_bitmap.Width, m_bitmap.Height);
                System.Threading.Thread.Sleep(100);
            }
------解决方案--------------------
引用:
Quote: 引用:

  while (stop)这理造成了 你还是要开一个线程来做要不然会卡死UI线程
            {
                bru.RotateTransform(2);
                g.FillRectangle(bru, 0, 0, m_bitmap.Width, m_bitmap.Height);
                System.Threading.Thread.Sleep(100);
            }
可是开线程的话就会引发上面那个异常啊


异常是因为你没用委托。要调用控件就要用委托。。。

------解决方案--------------------
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

  while (stop)这理造成了 你还是要开一个线程来做要不然会卡死UI线程