- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
你好,我做了一个非常简单的程序,通过 TCP-IP 获取一些图片地址并将它们显示在屏幕上。我的问题是,每次我更新一张图片时都会留下内存,这基本上让我内存力重载。
我一直在寻找一个遮阳篷并得出结论,我可能需要使用函数 Dispose,我的问题是当我尝试实现它时出现以下错误
错误 C2039:“Dispose”:不是“System::Windows::Forms::PictureBox”的成员
请注意,我使用的是 Visual Studio 2008,它确实对我有用。
我正在寻找的是当我想加载新图片时清除内存的正确方法。
这是我的代码,感谢那里的任何人花时间查看我的问题
using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;
/// <summary>
/// Summary for Form1
///
/// WARNING: If you change the name of this class, you will need to change the
/// 'Resource File Name' property for the managed resource compiler tool
/// associated with all .resx files this class depends on. Otherwise,
/// the designers will not be able to interact properly with localized
/// resources associated with this form.
/// </summary>
public ref class Form1 : public System::Windows::Forms::Form
{
public:
Form1(void)
{
InitializeComponent();
pictureBoxArrayLeft->Resize(pictureBoxArrayLeft,15);
pictureBoxArrayRight->Resize(pictureBoxArrayRight,15);
IPAddress^ listenInterface = IPAddress::Any;//Parse("127.0.0.1");
int listenPort = 12000;
int bufferSize = 4096;
sendBuffer = gcnew array<Byte>(bufferSize);
receiveBuffer = gcnew array<Byte>(bufferSize);
tcpServer = gcnew TcpListener(listenInterface, listenPort);
// Start listening for connections
tcpServer->Start();
incomeText = "";
connection_active = false;
readyToRead = true;
System::ComponentModel::ComponentResourceManager^ resources = (gcnew System::ComponentModel::ComponentResourceManager(Form1::typeid));
int loopRunner;
loopRunner = 0;
while(loopRunner < 15)
{
pictureBoxArrayLeft[loopRunner] = (gcnew System::Windows::Forms::PictureBox());
(cli::safe_cast<System::ComponentModel::ISupportInitialize^ >(this->pictureBoxArrayLeft[loopRunner]))->BeginInit();
//
// pictureBox1
//
this->pictureBoxArrayLeft[loopRunner]->BackColor = System::Drawing::Color::Black;
this->pictureBoxArrayLeft[loopRunner]->Location = System::Drawing::Point(0, (73*loopRunner));
this->pictureBoxArrayLeft[loopRunner]->Image = (cli::safe_cast<System::Drawing::Image^ >(resources->GetObject(L"pictureBox1.Image")));
this->pictureBoxArrayLeft[loopRunner]->Size = System::Drawing::Size(73,73);
this->pictureBoxArrayLeft[loopRunner]->SizeMode = System::Windows::Forms::PictureBoxSizeMode::Zoom;
this->pictureBoxArrayLeft[loopRunner]->TabIndex = 1;
this->pictureBoxArrayLeft[loopRunner]->TabStop = false;
this->pictureBoxArrayLeft[loopRunner]->Visible = true;
this->Controls->Add(this->pictureBoxArrayLeft[loopRunner]);
pictureBoxArrayLeft[loopRunner]->BringToFront();
loopRunner++;
}
loopRunner = 0;
while(loopRunner < 15)
{
pictureBoxArrayRight[loopRunner] = (gcnew System::Windows::Forms::PictureBox());
(cli::safe_cast<System::ComponentModel::ISupportInitialize^ >(this->pictureBoxArrayRight[loopRunner]))->BeginInit();
//
// pictureBox1
//
this->pictureBoxArrayRight[loopRunner]->BackColor = System::Drawing::Color::Black;
this->pictureBoxArrayRight[loopRunner]->Location = System::Drawing::Point((1342-73), (73*loopRunner));
this->pictureBoxArrayRight[loopRunner]->Image = (cli::safe_cast<System::Drawing::Image^ >(resources->GetObject(L"pictureBox1.Image")));
this->pictureBoxArrayRight[loopRunner]->Size = System::Drawing::Size(73,73);
this->pictureBoxArrayRight[loopRunner]->SizeMode = System::Windows::Forms::PictureBoxSizeMode::Zoom;
this->pictureBoxArrayRight[loopRunner]->TabIndex = 1;
this->pictureBoxArrayRight[loopRunner]->TabStop = false;
this->pictureBoxArrayRight[loopRunner]->Visible = true;
this->Controls->Add(this->pictureBoxArrayRight[loopRunner]);
pictureBoxArrayRight[loopRunner]->BringToFront();
loopRunner++;
}
}
void pictures(String^ incomeText)
{
readyToRead = false;
int counter;
for(counter = 0; counter < 15; counter++)
{
pictureBoxArrayLeft[counter]->Visible = false;
pictureBoxArrayRight[counter]->Visible = false;
}
System::ComponentModel::ComponentResourceManager^ resources = (gcnew System::ComponentModel::ComponentResourceManager(Form1::typeid));
String^ tempstring;
String^ tempstring2;
counter = 0;
pictureBox1->Image = pictureBox1->Image->FromFile(incomeText->Substring(0,incomeText->IndexOf(L"#",0)));
tempstring = incomeText->Substring(incomeText->IndexOf(L"#",0)+1);
while(tempstring != L"")
{
tempstring2 = tempstring->Substring(0,tempstring->IndexOf(L"#",0));
pictureBoxArrayLeft[counter]->Image = (cli::safe_cast<System::Drawing::Image^ >(Image::FromFile(tempstring2)));
pictureBoxArrayRight[counter]->Image = (cli::safe_cast<System::Drawing::Image^ >(Image::FromFile(tempstring2)));
pictureBoxArrayLeft[counter]->Visible = true;
pictureBoxArrayRight[counter]->Visible = true;
tempstring = tempstring->Substring(tempstring->IndexOf(L"#",0)+1);
counter++;
}
readyToRead = true;
}
void Send(String^ outgoing)
{
if(connection_active == true)
{
sendBuffer = System::Text::Encoding::ASCII->GetBytes(outgoing);
tcpStream->Write(sendBuffer,0,sendBuffer->Length);
}
}
void StartIfPending()
{
if(tcpServer->Pending())
{
// Wait for a client connection
tcpClient = tcpServer->AcceptTcpClient();
// Get the NetworkStream so we can do Read and Write on the client connection
tcpStream = tcpClient->GetStream();
connection_active = true;
IPEndPoint^ ep = safe_cast<IPEndPoint^>(tcpClient->Client->RemoteEndPoint);
}
else
{
}
}
void Service()
{
StartIfPending();
String^ incomeText = Recieve();
if(incomeText != "" && incomeText != "<<") //check for empty String^ or empty command
{
if(readyToRead == true)
{
pictures(incomeText);
}
}
}
String^ Recieve()
{
if(connection_active == true)
{
try
{
// Receive the data
if(tcpStream->DataAvailable)
{
// Read some data
count = tcpStream->Read(receiveBuffer, 0, 4096);//nextReadCount);
// Display what we read
String^ inBufferString = System::Text::Encoding::ASCII->GetString(receiveBuffer, 0, count);
return inBufferString;
}
else
{
return "";
}
}
catch (SocketException^ err)
{
// Exceptions on the TcpListener are caught here
}
catch (IO::IOException^ err)
{
// Exceptions on the NetworkStream are caught here
}
}
else
{
return "";
}
}
protected:
/// <summary>
/// Clean up any resources being used.
/// </summary>
~Form1()
{
if (components)
{
delete components;
}
}
private: array<System::Windows::Forms::PictureBox^>^ pictureBoxArrayLeft;
private: array<System::Windows::Forms::PictureBox^>^ pictureBoxArrayRight;
private: TcpListener^ tcpServer;
private: TcpClient^ tcpClient;
private: NetworkStream^ tcpStream;
private: array<Byte>^ sendBuffer;
private: array<Byte>^ receiveBuffer;
private: array<Byte>^ byteCount;
private: int count;
private: bool connection_active;
private: String^ incomeText;
private: bool readyToRead;
private: System::Windows::Forms::Timer^ timer1;
private: System::Windows::Forms::PictureBox^ pictureBox1;
private: System::ComponentModel::IContainer^ components;
protected:
private:
/// <summary>
/// Required designer variable.
/// </summary>
#pragma region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
void InitializeComponent(void)
{
this->components = (gcnew System::ComponentModel::Container());
System::ComponentModel::ComponentResourceManager^ resources = (gcnew System::ComponentModel::ComponentResourceManager(Form1::typeid));
this->timer1 = (gcnew System::Windows::Forms::Timer(this->components));
this->pictureBox1 = (gcnew System::Windows::Forms::PictureBox());
(cli::safe_cast<System::ComponentModel::ISupportInitialize^ >(this->pictureBox1))->BeginInit();
this->SuspendLayout();
//
// timer1
//
this->timer1->Enabled = true;
this->timer1->Tick += gcnew System::EventHandler(this, &Form1::timer1_Tick);
//
// pictureBox1
//
this->pictureBox1->BackColor = System::Drawing::Color::Black;
this->pictureBox1->Image = (cli::safe_cast<System::Drawing::Image^ >(resources->GetObject(L"pictureBox1.Image")));
this->pictureBox1->Location = System::Drawing::Point(2, -1);
this->pictureBox1->Name = L"pictureBox1";
this->pictureBox1->Size = System::Drawing::Size(1342, 730);
this->pictureBox1->SizeMode = System::Windows::Forms::PictureBoxSizeMode::Zoom;
this->pictureBox1->TabIndex = 1;
this->pictureBox1->TabStop = false;
//
// Form1
//
this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
this->ClientSize = System::Drawing::Size(1344, 730);
this->Controls->Add(this->pictureBox1);
this->Name = L"Form1";
this->Text = L"Form1";
(cli::safe_cast<System::ComponentModel::ISupportInitialize^ >(this->pictureBox1))->EndInit();
this->ResumeLayout(false);
}
#pragma endregion
private: System::Void timer1_Tick(System::Object^ sender, System::EventArgs^ e)
{
Service();
}
};
}
最佳答案
在 C++/CLI 中,您不会显式调用 Dispose。相反,请执行 delete
在对象上,就像对任何 C++ 对象一样。编译器在后台调用 Dispose 将其转换。
关于visual-studio-2008 - 如何清除 System::Windows::Forms::PictureBox^ cpp 的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14382762/
我经常使用 SSMS 查询数据和构建数据集,我的 IT 部门负责数据库管理。 最近我发现了 Azure Data Studio,我喜欢: 智能感知 源代码控制(例如使用 Git) 来自社区的扩展 SQ
我想根据我使用的 visual studio 版本编译不同的东西,比如 #if VISUAL_STUDIO_VERSION > 2015 eventH?.Invoke(this, EventArgs.
我们的开发团队计划从 visual studio 2005 升级到 visual studio 2010 -- 跳过 visual studio 2008。 大部分项目是VB ASP.NET项目,使用
我的Visual Studio 2015无法构建2010平台工具集。它说: The build tools for Visual Studio 2010 (v100) cannot be found.
我目前正在使用 Visual Studio 2015 来编程 ASP.NET Core 应用程序。我对安装 Visual Studio 2017 有以下疑问: 什么被认为是最佳实践和/或最干净的方法?
尝试从扩展和更新获取 Visual Studio 扩展时,出现以下错误:- 向 visualstudiogallery.msdn.microsoft.com/Services/VStudio/Exte
这个问题在这里已经有了答案: Can Visual Studio Code and VS 2012 be installed on same computer? (1 个回答) 关闭去年。 在安装了
作为标准安装的一部分,Visual Studio Code 带有一个名为“Monokai Dimmed”的颜色主题。 有没有办法将它移植到 Visual Studio 2015?我检查了社区主题( h
我想开始编程 CUDA。 我已经安装了 Visual Studio 2010 Express。 我还安装了 nVidia nSight Visual Studio。 而且我具备所有常见的先决条件(Ne
Visual Studio Community Edition是否可以使用Visual Studio Online帐户上的存储库? 我一直为包含在Online帐户中的Visual Studio Onl
我有一个我一直在开发的应用程序,但在 android studio 上遇到了问题。当我点击“build->run”然后选择我的设备时,应用程序永远不会在我的手机上运行(并且自动出现的android-s
我正在使用Visual Studio2010。我面临的一个问题是,当我创建一个新的Web项目时,Visual Studio将创建该项目,并且不会在解决方案资源管理器中显示其解决方案。 另一件事是,我想
我通读了这里的许多帖子,却找不到一个有效的明确答案。因此,在花了一些时间使它生效之后,我认为应该发布它。 问题:发布配置文件将建立在服务器上,但不会发布。 解: 确保已安装Microsoft Wind
我正在尝试使用Visual Studio 2012构建针对.NET 3.5的C++ CLI应用程序。 通过安装Visual Studio 2008,并指定v90平台工具集,我已经在一台机器上进行了这项
我在 Microsoft Visual Studios 2013 中有一个项目,我想在 Microsoft Visual Studios 2010 中打开它。有什么简单的方法吗?还是我必须在2010年
我想知道,如果我发送一个解决方案文件夹(它是用 visual studio C# 编写的),您可以在 visual studio for mac 中打开解决方案吗? 在visual studio 20
有没有办法在 Visual Studio Code 和 Visual Studio 中设置相同的快捷方式(而不必每次都手动更改它们)? 例如,我在 Visual Studio Code 中经常使用 A
我刚开始了解 Visual Studio Code。我想知道,我可以将 Visual Studio 替换为所有 .NET 开发相关的工作吗? 我可以节省 Visual Studio 许可的成本吗? V
我安装了具有有效许可证(Visual Studio 订阅)的 Visual Studio 2019 企业版(VS 2019 16.1.4),它运行良好。 突然之间,当我尝试打开项目或项目中的任何文件时
我一直在使用 Compass 编译 Windows 环境中的 sass 文件,无论是在命令行上还是使用 Compass-app 来查看目录。 我刚刚开始使用 Visual Studio(专业版 201
我是一名优秀的程序员,十分优秀!