
КОП-Примеры / Ресурсы
.docПример 7.1. Использование ресурсов.
///////////////
// C#
// Компонент CmpU с неуправляемым ресурсом
using System;
using System.IO;
using System.ComponentModel;
namespace csK_Disp_DLL_4
{
public class CmpU: Component
{ private int number; // Номер компонента
private bool disposed= false;
FileStream file; // Неуправляемый ресурс
public int Number
{get {return number;}}
public CmpU (int CompNum)
{ number= CompNum;
// Создание файла - неуправляемого ресурса
file= new FileStream ("c:\\КОП\\FileRes.txt",
FileMode.Create);
}
~CmpU ( ) { }
public void Work ( )
{ // Использовать неуправляемый ресурс
string str= number.ToString ( );
BinaryWriter binWriter= new BinaryWriter (file);
binWriter.Write (str);
Console.WriteLine ("Компонент " + str +
" записал в файл ResFile.txt (неуправляемый ресурс)");
}
public void Dispose ( )
{ Dispose (true);
Console.WriteLine ("Компонент "+ number +
" освободил ресурсы");
GC.SuppressFinalize (this);
}
protected virtual void Dispose (bool disposing )
{ if (! this.disposed) // Если первый вызов функции Dispose
{ if (disposing)
{
// Управляемые ресурсы не освобождаем,
// поскольку компонент их не использует }
// Освободить используемый неуправляемый ресурс
file.Close ( );
}
disposed= true;
}
}
}
///////////////
// C#
using System;
using System.IO;
using csK_Disp_DLL_4;
class Client
{ static void Main (string[] args)
{ CmpU cmpU= new CmpU (5);
cmpU.Work ( );
cmpU.Dispose ( );
// Неуправляемый ресурс (файл)
FileStream file;
file= new FileStream ("c:\\КОП\\FileRes.txt",
FileMode.Create);//.Open);
// Если закомментировать строку cmpU.Dispose ( );,то
// Error: Process can't access the file because it is
// being used by another process
}
}
Пример 7.2. Использование компонентом неуправляемого и управляемого ресурсов.
///////////////
// C#
// Компонент CmpUM с неуправляемым и управляемым ресурсами
using System;
using System.IO;
using System.ComponentModel;
using csK_Disp_DLL_4;
namespace csK_Disp_DLL_5
{ public class CmpUM: Component
{ private int number; // Номер компонента
private bool disposed= false;
FileStream file1; // Неуправляемый ресурс
CmpU cmpU; // Управляемый ресурс
public int Number
{get {return number;}}
public CmpUM (int CompNum)
{ number= CompNum;
// Создание файла - неуправляемого ресурса
file1= new FileStream ("c:\\КОП\\FileRes1.txt",
FileMode.Create);
cmpU= new CmpU (100);
}
~CmpUM ( ) { }
public void Work ( )
{ // Использовать неуправляемый ресурс
string str= number.ToString ( );
BinaryWriter binWriter= new BinaryWriter (file1);
binWriter.Write (str);
Console.WriteLine ("Компонент " + str +
" записал в файл FileRes1.txt (неуправляемый ресурс)");
cmpU.Work ( );
}
public void Dispose ( )
{ Dispose (true);
Console.WriteLine ("Компонент "+ number +
" освободил ресурсы");
GC.SuppressFinalize (this);
}
protected virtual void Dispose (bool disposing )
{ if (! this.disposed) // Если первый вызов функции Dispose
{
if (disposing)
{ // Освободить используемый управляемый ресурс
// (компонент cmpU)
cmpU.Dispose ( );
cmpU= null;
}
// Освободить используемый неуправляемый ресурс
// (файл FileRes1.txt)
file1.Close ( );
}
disposed= true;
}
}
}
///////////////
// C#
using System;
using System.IO;
using csK_Disp_DLL_5;
class Client
{
static void Main (string[] args)
{ // Неуправляемый ресурс (файл)
//FileStream file;
CmpUM cmpUM= new CmpUM (5);
cmpUM.Work ( );
cmpUM.Dispose ( );
// Неуправляемый ресурс (файл)
FileStream file;
file= new FileStream ("c:\\КОП\\FileRes.txt",
FileMode.Create);
FileStream file1;
file1= new FileStream ("c:\\КОП\\FileRes1.txt",
FileMode.Create);
// Если закомментировать строку cmpU.Dispose ( );,то
// Error: Process can't access the file because it is
// being used by another process
}
}
///////////////
// C#
// Компонент CmpU с неуправляемым ресурсом
using System;
using System.IO;
using System.ComponentModel;
namespace csCmpU
{
public class CmpU: Component
{
private int number; // Номер компонента
private bool disposed= false;
FileStream file; // Неуправляемый ресурс
public int Number
{
get {return number;}
}
public CmpU (int CompNum)
{
number= CompNum;
// Создание файла - неуправляемого ресурса
file= new FileStream ("c:\\КНИГИ\\Книги-КОП\\FileRes.txt",
FileMode.Create);
}
~CmpU ( ) { }
public void Work ( )
{
// Использовать неуправляемый ресурс
string str= number.ToString ( );
BinaryWriter binWriter= new BinaryWriter (file);
binWriter.Write (str);
Console.WriteLine ("Компонент " + str +
" записал в файл ResFile.txt (неуправляемый ресурс)");
}
public void Dispose ( )
{
Dispose (true);
Console.WriteLine ("Компонент "+ number +
" освободил ресурсы");
GC.SuppressFinalize (this);
}
protected virtual void Dispose (bool disposing )
{
if (! this.disposed) // Если первый вызов функции Dispose
{
if (disposing)
{
// Управляемые ресурсы не освобождаем,
// поскольку компонент их не использует
}
// Освободить используемый неуправляемый ресурс
file.Close ( );
}
disposed= true;
}
}
}
///////////////
// C#
// Компонент CmpUM с неуправляемым и управляемым ресурсами
using System;
using System.IO;
using System.ComponentModel;
using csCmpU
namespace csK_Disp_DLL_5// cs CmpUM
{
public class CmpUM: Component
{
private int number; // Номер компонента
private bool disposed= false;
FileStream file1; // Неуправляемый ресурс
CmpU cmpU; // Управляемый ресурс
public int Number
{get {return number;}}
public CmpUM (int CompNum)
{ number= CompNum;
// Создание файла - неуправляемого ресурса
file1= new FileStream ("c:\\КНИГИ\\Книги-КОП\\FileRes1.txt",
FileMode.Create);
cmpU= new CmpU (100);
}
~CmpUM ( ) { }
public void Work ( )
{ // Использовать неуправляемый ресурс
string str= number.ToString ( );
BinaryWriter binWriter= new BinaryWriter (file1);
binWriter.Write (str);
Console.WriteLine ("Компонент " + str +
" записал в файл FileRes1.txt (неуправляемый ресурс)");
cmpU.Work ( );
}
public void Dispose ( )
{ Dispose (true);
Console.WriteLine ("Компонент "+ number +
" освободил ресурсы");
GC.SuppressFinalize (this);
}
protected virtual void Dispose (bool disposing )
{ if (! this.disposed) // Если первый вызов функции Dispose
{
if (disposing)
{
// Освободить используемый управляемый ресурс
// (компонент cmpU)
cmpU.Dispose ( ); // 1
cmpU= null; // 1
}
// Освободить используемый неуправляемый ресурс
// (файл FileRes1.txt)
file1.Close ( );
}
disposed= true;
}
}
}
///////////////
// C#
using System;
using System.IO;
using csCmpUM
class Client
{
static void Main (string[] args)
{
CmpUM cmpUM= new CmpUM (5);
cmpUM.Work ( );
cmpUM.Dispose ( );
// Неуправляемый ресурс (файл)
// FileStream file; //2
// file= new FileStream ("c:\\КНИГИ\\Книги-КОП\\FileRes.txt", // 2
// FileMode.Create); // 2
// Если закомментировать строку 1 cmpU.Dispose ( ); и
// раскомментировать строки 2, то сгенерируется исключение:
// Error: Process can't access the file because it is
// being used by another process
}
}