我最近遇到了我的应用程序的以下问题:它没有显示任何控制台输出,虽然控制台已经使用分配AllocConsole.我设法很快发现它是由于AllocConsole在调用之前写入控制台的尝试(深深隐藏在代码中)引起的.所以它看起来像这样:
Console.WriteLine("Foo"); // no console allocated yet
AllocConsole(); // console window appears
Console.WriteLine("Bar"); // expecting "Bar" in the console, but the console is blank
Run Code Online (Sandbox Code Playgroud)
所以我的问题是:为什么会发生这种情况?我没有看到任何例外(虽然我认为他们在那里).
private void Draw(){
int width = Screen.PrimaryScreen.Bounds.Width;
int height = Screen.PrimaryScreen.Bounds.Height;
Bitmap image= new Bitmap(width, height);
Graphics gr = Graphics.FromImage(image);
gr.CopyFromScreen(0, 0, 0, 0, new Size(width, height));
Random rnd = new Random();
gr.DrawEllipse(new Pen(Color.Red, rnd.Next(100)), rnd.Next(300), rnd.Next(100), rnd.Next(600), rnd.Next(1000));
Point[] p = new Point[3];
p[0] = new Point(rnd.Next(30), rnd.Next(60));
p[1] = new Point(rnd.Next(100), rnd.Next(260));
p[2] = new Point(rnd.Next(30), rnd.Next(10));
gr.DrawPolygon(Pens.AliceBlue, p);
gr.DrawBeziers(Pens.Yellow, p);
pcImageBox.Image = image;
}
Run Code Online (Sandbox Code Playgroud)
当我每300毫秒使用Timer并调用该Draw()方法时,一切正常,但是当我查看流程管理器时,我的项目使用了更多的内存(内存每300毫秒增加一次)
也许我应该使用垃圾收集器或使用垃圾收集器p = null;。如何解决此问题?
感谢您的帮助,对不起我的英语不好。
我有以下代码:
Chromosome[] pop = new Chromosome[popSize];
int[] initialGenes = new int[i];
for (int m = 0; m < i; m++)
initialGenes[m] = -1;
for (int j = 0; j < popSize; j++)
{
pop[j] = new Chromosome(graph, initialGenes);
}
Run Code Online (Sandbox Code Playgroud)
Chromosome 是我的班级,有财产
public int[] Genes { get; set; }
Run Code Online (Sandbox Code Playgroud)
如您所见,我初始化了一个Chromosome对象数组.问题是,当我试图改变的值pop[i].Genes[k](例如pop[1].Genes[2] = 123)所有Genes[k]的pop改变(即
pop[0].Genes[2] == 123
pop[2].Genes[2] == 123
Run Code Online (Sandbox Code Playgroud)
等等.)
谁能解释一下问题是什么?
谢谢.
我使用RegisterHotkey函数在我的应用程序中创建了热键,就像这样
[DllImport("user32.dll")]
public static extern bool RegisterHotKey(IntPtr hWnd, int id, int fsModifiers, int vlc);
...
RegisterHotKey(FormHandle, HOTSAVE, MOD_CONTROL, (int)'S');
Run Code Online (Sandbox Code Playgroud)
这FormHandle是应用程序主要形式的句柄,HOTSAVE- 是常量 - 热键的标识符.问题是,我的应用程序收到热键消息,即使它不在焦点,从而阻止其他应用程序处理他们的热键(例如Ctrl+S在记事本中将无法工作).
谁能指出问题出在哪里?谢谢.