【问题标题】:Invalid Parameter无效的参数
【发布时间】:2018-11-05 08:19:29
【问题描述】:

我有具体问题,我不知道如何解决。我已经在 Winforms 中编写了程序,它在 Task 中占用了所有时间的屏幕截图。它的工作大约几分钟就会崩溃。

           private void TaskBot()
        {
            Task taskHeal = new Task(() =>
            {

                while (boolCheckBoxHP != null)
                {
                    Thread.Sleep(200);
                    if (boolCheckBoxHP == true)
                    {
                        Bitmap bitmap;

                        try
                        {
                            bitmap = new 
//THERE IS AN ERROR
Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height); 
//THERE IS AN ERROR
                            Graphics graphics = Graphics.FromImage(bitmap);
                            graphics.CopyFromScreen(0, 0, 0, 0, bitmap.Size, CopyPixelOperation.SourceCopy);

                        }
                        catch (Exception ex)
                        {
                            MessageBox.Show("Error: " + ex.Message + "\n\nCause: " + "SpriteSet not yet loaded.");
                            bitmap = null;
                        }

                        KontrolujPoziomHP(bitmap);
                        if (bitmap != null) bitmap.Dispose();
                    }

                    if (boolCheckBoxMana == true)
                    {
                        Bitmap bitmap;

                        try
                        {
                            bitmap = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height); 
                            Graphics graphics = Graphics.FromImage(bitmap);
                            graphics.CopyFromScreen(0, 0, 0, 0, bitmap.Size, CopyPixelOperation.SourceCopy);

                        }
                        catch (Exception ex)
                        {
                            MessageBox.Show("Error: " + ex.Message + "\n\nCause: " + "SpriteSet not yet loaded.");
                            bitmap = null;
                        }
                        Thread.Sleep(50);
                        KontrolujPoziomMany(bitmap);
                        if (bitmap != null) bitmap.Dispose();
                    }
                }
            });
            taskHeal.Start();
        }

这是来自 Visual Studio 的错误:

The parameter is invalid

System.ArgumentException HResult = 0x80070057 消息 = 参数是 无效的。 Source = System.Drawing 堆栈跟踪:在 System.Drawing.Bitmap..ctor(Int32 宽度,Int32 高度,PixelFormat 格式)在 System.Drawing.Bitmap..ctor(Int32 宽度,Int32 高度)中 TibiaHelper.Form1.CopyScreen (in ) in C:\Users\Pawel\source\ repos \ TibiaHelper \ TibiaHelper \ Form1.cs:第157行 TibiaHelper.Form1.检查C:\Users\Pawel\source中的LevelHP() \repos\TibiaHelper\TibiaHelper\Form1.cs:第 368 行 TibiaHelper.Form1.b__22_0() 在 C:\Users\Pawel\source\repos\ TibiaHelper \ TibiaHelper \ Form1.cs:第308行 System.Threading.Tasks.Task.InnerInvoke() 中的 System.Threading。 任务.Task.Execute()

【问题讨论】:

  • 这个错误用英语怎么说?
  • 完成后最好处理掉该图形对象。位图在哪里使用,什么时候处理?
  • 表示参数无效。我试图处理位图对象,但没有帮助。
  • 图形对象怎么样:发布的代码没有处理它。这段代码在哪里运行?显示出来。
  • 我在我的问题中编辑代码。

标签: c# winforms bitmap task system.drawing


【解决方案1】:

您的内存和/或连续地址空间不足。如果您在 32 位进程中,则很可能是后者。完成后正确处理图形和位图应该会有所帮助。如果屏幕大小没有改变,还可以考虑重用相同的位图。屏幕大小的位图非常大。

以下代码将在 30 次迭代后因该异常而崩溃。

for (int i = 0; i < 500; i++)
{
    new Bitmap(5000, 5000);
}

这样完成就好了,但是会花一些时间,而且很浪费。

for (int i = 0; i < 500; i++)
{
    new Bitmap(5000, 5000).Dispose();
}

更新:从您的编辑中我可以看到您没有处理图形对象。您还应该明确地重复使用这样的位图和图形

private async Task Foo(CancellationToken cancel)
{
    using (var bitmap = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height))
    using (var graphics = Graphics.FromImage(bitmap))
    {
        while (true)
        {
            cancel.ThrowIfCancellationRequested();
            graphics.CopyFromScreen(0, 0, 0, 0, bitmap.Size, CopyPixelOperation.SourceCopy);
            ProcessImage(bitmap);
            await Task.Delay(200);
        }
    }
}

【讨论】:

    猜你喜欢
    • 2016-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-19
    • 2018-01-12
    相关资源
    最近更新 更多