игра брюс 2048
Главная / Программирование / Создание Windows-приложений на основе Visual C# / Тест 7

Создание Windows-приложений на основе Visual C# - тест 7

Упражнение 1:
Номер 1
Выберите правильное определение  концепции асинхронного программирования

Ответ:

 (1) при асинхронном выполнении приложения запускается несколько последовательных потоков, которые несут в себе обработку приложения. Часть этих потоков используется для взаимодействия с пользовательским интерфейсом и работы с прочими приложениями 

 (2) при асинхронном выполнении приложения в работу включается непосредственно процессор, обладающей асинхронной структурой. Задачу выполнения пользовательского интерфейса берет на себя сам процессор 

 (3) при асинхронном выполнении приложения запускается несколько параллельных потоков, в большей части которых выполняется приложение. Другие потоки используются для взаимодействия с пользовательским интерфейсом и работы с прочими приложениями 

 (4) при асинхронном выполнении приложения используется встроенная модель операционной системы Windows – программисту не приходится задумываться о пользовательском интерфейсе приложения в этот момент 

 (5) при асинхронном выполнении приложения все задачи переводятся в отдельные потоки, не мешающие друг другу. Это основная модель операционной системы 


Номер 2
Выберите правильную ситуацию, которую можно характеризовать проблемой Race condition

Ответ:

 (1) клиент K. банка "ABC" приходит в его региональный филиал и предоставляет оператору некоторые данные для идентификации. Оператор отправляет запрос в главное представительство. Возникает поток, считывающий данные из базы данных. В это время администратор главного представительства присваивает клиентам новые ключи, затрагивая данные клиента K. В результате возвращаемый запрос может содержать данные, неверно идентифицирующие клиента K 

 (2) клиент K. банка "ABC" подходит к банкомату, который поддерживает обращение с пластиковыми магнитными картами этого банка. После считывания данных формируется запрос, отправляемый в главное отделение банка. Сформированный поток должен дождаться своей очереди (обращений к модемному пулу несколько), затем перевести баланс из главного отделения в банкомат и заблокировать счет в банке. В свою очередь, в банке при обращении из банкомата формируется поток, который должен дождаться окончания расчета клиента, перевести процентную ставку в банк и заблокировать счет клиента в банкомате 

 (3) клиент K. банка "ABC" приходит в его региональный филиал и предоставляет оператору некоторые данные для идентификации. Оператор отправляет запрос в главное представительство. Возникает поток, считывающий данные из базы данных. Из-за большого числа клиентов, обращающихся к главному серверу, оператору не удается получить ответ 

 (4) клиент K. банка "ABC" подходит к банкомату, который поддерживает обращение с пластиковыми магнитными картами этого банка. После считывания данных формируется запрос, отправляемый в главное отделение банка. Для идентификации карты требуется получить обратный запрос из банка. В случае трехкратной неправильной идентификации банкомат блокируется. Клиент К. дважды попытался снять деньги, но его данные были неверны. После него клиент M. также пытался идентифицировать карту, но допустил ошибку ввода. Последующие правильные действия были блокированы 


Номер 3
Выберите правильную ситуацию, которую можно характеризовать проблемой Race condition

Ответ:

 (1) клиент K. банка "ABC" подходит к банкомату, который поддерживает обращение с пластиковыми магнитными картами этого банка. После считывания данных формируется запрос, отправляемый в главное отделение банка. Сформированный поток должен дождаться своей очереди (обращений к модемному пулу несколько), затем перевести баланс из главного отделения в банкомат и заблокировать счет в банке. В свою очередь, в банке при обращении из банкомата формируется поток, который должен дождаться окончания расчета клиента, перевести процентную ставку в банк и заблокировать счет клиента в банкомате 

 (2) клиент K. банка "ABC" приходит в его региональный филиал и предоставляет оператору некоторые данные для идентификации. Оператор отправляет запрос в главное представительство. Возникает поток, считывающий данные из базы данных. Из-за большого числа клиентов, обращающихся к главному серверу, оператору не удается получить ответ 

 (3) клиент K. банка "ABC" приходит в его региональный филиал и предоставляет оператору некоторые данные для идентификации. Оператор отправляет запрос в главное представительство. Возникает поток, считывающий данные из базы данных. В это время администратор главного представительства присваивает клиентам новые ключи, затрагивая данные клиента K. В результате возвращаемый запрос может содержать данные, неверно идентифицирующие клиента K 

 (4) клиент K. банка "ABC" подходит к банкомату, который поддерживает обращение с пластиковыми магнитными картами этого банка. После считывания данных формируется запрос, отправляемый в главное отделение банка. Для идентификации карты требуется получить обратный запрос из банка. В случае трехкратной неправильной идентификации банкомат блокируется. Клиент К. дважды попытался снять деньги, но его данные были неверны. После него клиент M. также пытался идентифицировать карту, но допустил ошибку ввода. Последующие правильные действия были блокированы 


Упражнение 2:
Номер 1
Вы разрабатываете приложение, использующее асинхронную модель работы. Для запуска произвольного метода SomeMethod вы создали делегат SomeDelegate
        private delegate string SomeDelegate(/*Некоторые параметры*/);

private string SomeMethod(/*Некоторые параметры*/)
{
	//Код для работы метода
}
		

Выберите способ завершения работы EndOperation метода SomeMethod:


Ответ:

 (1) private void MethodEndOperation_Event(object sender, System.EventArgs e) { SomeDelegate sd = new SomeDelegate(); sd.SomeMethod(); IAsyncResult ar = sd.BeginInvoke(/*Тип завершения*/, null, null); /*Результат работы метода*/ = sd.EndInvoke(ar); } 

 (2) private void MethodEndOperation_Event(object sender, System.EventArgs e) { SomeDelegate sd = new SomeDelegate(); sd.Method.SomeMethod(); IAsyncResult ar = sd.BeginInvoke(/*Тип завершения*/, null, null); /*Результат работы метода*/ = sd.EndInvoke(ar); } 

 (3) private void MethodEndOperation_Event(object sender, System.EventArgs e) { SomeDelegate sd = new SomeDelegate (SomeMethod); IAsyncResult ar = sd.BeginInvoke(/*Тип завершения*/, null, null); /*Результат работы метода*/ = sd.EndInvoke(ar); } 

 (4) private void MethodEndOperation_Event(object sender, System.EventArgs e) { SomeDelegate sd = new SomeDelegate(); sd.Method.SomeMethod(); IAsyncResult ar = sd.BeginInvoke(/*Тип завершения*/, null, null); /*Результат работы метода*/ = sd.EndInvoke(SomeMethod); } 

 (5) private void MethodEndOperation_Event(object sender, System.EventArgs e) { SomeDelegate sd = new SomeDelegate (SomeMethod); IAsyncResult ar = sd.BeginInvoke(/*Тип завершения*/, null, null); /*Результат работы метода*/ = sd.EndInvoke(SomeMethod); } 


Номер 2
Вы разрабатываете приложение, использующее асинхронную модель работы. Для запуска произвольного метода SomeMethod вы создали делегат SomeDelegate
        private delegate string SomeDelegate(/*Некоторые параметры*/);

private string SomeMethod(/*Некоторые параметры*/)
	{
		//Код для работы метода
	}
		

Выберите способ завершения работы Pooling метода SomeMethod:


Ответ:

 (1) private void MethodPooling_Event (object sender, System.EventArgs e) { SomeDelegate sd = new SomeDelegate(); sd.SomeMethod(); IAsyncResult ar = sd.BeginInvoke(/*Тип завершения*/, null, null); while(!ar.IsCompleted) { //Код для работы. } // Получаем результаты асинхронного метода. /*Результат работы метода*/ = sd.EndInvoke(SomeMethod); } 

 (2) private void MethodPooling_Event (object sender, System.EventArgs e) { SomeDelegate sd = new SomeDelegate(); sd.Method.SomeMethod(); IAsyncResult ar = sd.BeginInvoke(/*Тип завершения*/, null, null); { //Код для работы. } // Получаем результаты асинхронного метода. /*Результат работы метода*/ = sd.EndInvoke(SomeMethod); } 

 (3) private void MethodPooling_Event (object sender, System.EventArgs e) { SomeDelegate sd = new SomeDelegate(); sd.SomeMethod(); IAsyncResult ar = sd.BeginInvoke(/*Тип завершения*/, null, null); while(!ar.IsCompleted) { //Код для работы. } // Получаем результаты асинхронного метода. /*Результат работы метода*/ = ar.EndInvoke(SomeMethod); } 

 (4) private void MethodPooling_Event (object sender, System.EventArgs e) { SomeDelegate sd = new SomeDelegate (SomeMethod); IAsyncResult ar = sd.BeginInvoke(/*Тип завершения*/, null, null); while(!ar.IsCompleted) { //Код для работы. } // Получаем результаты асинхронного метода. /*Результат работы метода*/ = sd.EndInvoke(SomeMethod); } 

 (5) private void MethodPooling_Event (object sender, System.EventArgs e) { SomeDelegate sd = new SomeDelegate(); sd.Method.SomeMethod(); IAsyncResult ar = sd.BeginInvoke(/*Тип завершения*/, null, null); { //Код для работы. } // Получаем результаты асинхронного метода. /*Результат работы метода*/ = ar.EndInvoke(SomeMethod); } 


Номер 3
Вы разрабатываете приложение, использующее асинхронную модель работы. Для запуска произвольного метода SomeMethod вы создали делегат SomeDelegate
    private delegate string SomeDelegate(/*Некоторые параметры*/);

private string SomeMethod(/*Некоторые параметры*/)
{
	//Код для работы метода
}

Выберите способ завершения работы Callback метода SomeMethod:


Ответ:

 (1) private void MethodCallback _Event (object sender, System.EventArgs e) { SomeDelegate sd = new SomeDelegate(); sd.Method.SomeMethod(); AsyncCallback cb = new AsyncCallback(CallbackMethod); sd.BeginInvoke(/*Тип завершения*/, cb, sd); } private void CallbackMethod(IAsyncResult ar) { SomeDelegate sd = (SomeDelegate)ar.AsyncState; /*Результат работы метода*/ = sd.EndInvoke(ar); } 

 (2) private void MethodCallback _Event (object sender, System.EventArgs e) { SomeDelegate sd = new SomeDelegate(); sd.Method.SomeMethod(); AsyncCallback cb = new AsyncCallback(CallbackMethod); sd.BeginInvoke(/*Тип завершения*/, cb, sd); } private void CallbackMethod(IAsyncResult ar) { SomeDelegate sd = (SomeDelegate)ar.AsyncState; /*Результат работы метода*/ = sd.EndInvoke(ar); } 

 (3) private void MethodCallback _Event (object sender, System.EventArgs e) { SomeDelegate sd = new SomeDelegate (SomeMethod); AsyncCallback cb = new AsyncCallback(CallbackMethod); sd.BeginInvoke(/*Тип завершения*/, cb, sd); } private void CallbackMethod(IAsyncResult ar) { SomeDelegate sd = (SomeDelegate)ar.AsyncState; /*Результат работы метода*/ = sd.EndInvoke(ar); } 

 (4) private void MethodCallback _Event (object sender, System.EventArgs e) { SomeDelegate sd = new SomeDelegate(); sd.Method.SomeMethod(); AsyncCallback cb = new AsyncCallback(SomeMethod); sd.BeginInvoke(/*Тип завершения*/, cb, sd); } private void CallbackMethod(IAsyncResult ar) { SomeDelegate sd = (SomeDelegate)ar.AsyncState; /*Результат работы метода*/ = sd.EndInvoke(ar); } 

 (5) private void MethodCallback _Event (object sender, System.EventArgs e) { SomeDelegate sd = new SomeDelegate(); sd.Method.SomeMethod(); AsyncCallback cb = new AsyncCallback(SomeMethod); sd.BeginInvoke(/*Тип завершения*/, cb, sd); } private void CallbackMethod(IAsyncResult ar) { SomeDelegate sd = (SomeMethod)ar.AsyncState; /*Результат работы метода*/ = sd.EndInvoke(ar); } 


Упражнение 3:
Номер 1
Выберите правильную конструкцию применения атрибута Synchronization:

Ответ:

 (1) using System.Runtime.Remoting.Contexts; namespace SomeNameSpace { [Synchronization()] class SomeClass:ContextBoundObject { public SomeClass (int SomeInt) { //Код для работы } static SomeClass () { //Код для работы } … } } 

 (2) using System.Runtime.Remoting.Contexts; [Synchronization()] namespace SomeNameSpace { class SomeClass:ContextBoundObject { public SomeClass (int SomeInt) { //Код для работы } static SomeClass () { //Код для работы } … } } 

 (3) using System.Runtime.Remoting.Contexts; namespace SomeNameSpace { class SomeClass:ContextBoundObject { [Synchronization()] public SomeClass (int SomeInt) { //Код для работы } static SomeClass () { //Код для работы } … } } 

 (4) using System.Runtime.Remoting.Contexts; namespace SomeNameSpace { [Synchronization()] class SomeClass { public SomeClass (int SomeInt) { //Код для работы } static SomeClass () { //Код для работы } … } } 


Номер 2
Вы используете автоматическую синхронизацию объектов. Необходимо сделать так, чтобы с  классом SomeClass мог одновременно работать только один поток. Однако свойство SomeString внутри этого класса должно быть доступным для нескольких потоков. Выберите правильную конструкцию, позволяющую получить подобную функциональность:

Ответ:

 (1) using System.Runtime.Remoting.Contexts; namespace SomeNameSpace { [Synchronization()] class SomeClass:ContextBoundObject { string SomeString; public SomeClass (int SomeInt) { //Код для работы } static SomeClass () { //Код для работы } public string SomeString; { get{ return SomeString;} set{ SomeString = value;} } … } } 

 (2) using System.Runtime.Remoting.Contexts; [Synchronization()] namespace SomeNameSpace { class SomeClass:ContextBoundObject { static string SomeString; public SomeClass (int SomeInt) { //Код для работы } static SomeClass () { //Код для работы } public string SomeString; { get{ return SomeString;} set{ SomeString = value;} } … } } 

 (3) using System.Runtime.Remoting.Contexts; namespace SomeNameSpace { [Synchronization()] class SomeClass:ContextBoundObject { static string SomeString; public SomeClass (int SomeInt) { //Код для работы } static SomeClass () { //Код для работы } [Synchronization()] public static string SomeString; { get{ return SomeString;} set{ SomeString = value;} } … } } 

 (4) using System.Runtime.Remoting.Contexts; namespace SomeNameSpace { [Synchronization()] class SomeClass:ContextBoundObject { static string SomeString; public SomeClass (int SomeInt) { //Код для работы } static SomeClass () { //Код для работы } public static string SomeString; { get{ return SomeString;} set{ SomeString = value;} } … } } 


Номер 3
Выберите правильную конструкцию применения атрибута MethodImplAttribute:

Ответ:

 (1) using System.Threading; using System.Runtime.CompilerServices; namespace SomeNameSpace { [MethodImplAttribute(MethodImplOptions.Synchronized)] public class SomeClass { public void SomeMethod() { … } } } 

 (2) using System.Threading; using System.Runtime.CompilerServices; [MethodImplAttribute(MethodImplOptions.Synchronized)] namespace SomeNameSpace { public class SomeClass { public void SomeMethod() { … } } } 

 (3) using System.Threading; using System.Runtime.CompilerServices; namespace SomeNameSpace { public class SomeClass { [MethodImplAttribute(MethodImplOptions.Synchronized)] public void SomeMethod() { … } } } 

 (4) using System.Threading; System.Runtime.Remoting.Contexts; [MethodImplAttribute(MethodImplOptions.Synchronized)] namespace SomeNameSpace { public class SomeClass { public void SomeMethod() { … } } } 


Упражнение 4:
Номер 1
Вам необходимо подключиться к веб-службе LocHost и запустить ее метод SomeMethod в асинхронном  режиме. Для его извлечения  вы создали метод MethodExtract.  Выберите правильную конструкцию вызова:

Ответ:

 (1) private void MethodExtract () { LocHost.Service1 sv = new LocHost.Service1(); sv.BeginSomeMethod (new AsyncCallback(CbMethod), sv); } private void CbMethod(IAsyncResult ar) { LocHost.Service1 sv = (LocHost.Service1)ar.AsyncState; /*Результат работы метода*/= sv.EndSomeMethod (ar); } 

 (2) private void MethodExtract () { LocHost.Service1 sv = new LocHost.Service1(); sv.BeginSomeMethod (new AsyncCallback(CbMethod), sv); } private void CbMethod(IAsyncResult ar) { LocHost.Service1 sv = (LocHost.sv)ar.AsyncState; /*Результат работы метода*/= sv.EndSomeMethod (ar); } 

 (3) private void MethodExtract () { LocHost.Service1 sv = new LocHost.Service1(); sv.BeginSomeMethod (new AsyncCallback(SomeMethod), sv); } private void CbMethod(IAsyncResult ar) { LocHost.Service1 sv = (LocHost.sv)ar.AsyncState; /*Результат работы метода*/= sv.EndSomeMethod (ar); } 

 (4) private void MethodExtract () { LocHost.Service1 sv = new LocHost.Service1(); sv.BeginSomeMethod (new AsyncCallback(SomeMethod), sv); } private void CbMethod(IAsyncResult ar) { LocHost.Service1 sv = (LocHost.Service1)ar.AsyncState; /*Результат работы метода*/= sv.EndSomeMethod (ar); } 


Номер 2
Выберите правильный пример применения области синхронизации:

Ответ:

 (1) using System; using System.Threading; namespace SomeNameSpace { public class SomeClass { System.Object SomeMethod = new System.Object(); lock(SomeMethod) public void SomeMethod() { … } } } 

 (2) using System; using System.Threading; namespace SomeNameSpace { public class SomeClass { public void SomeMethod() { System.Object SomeCode = new System.Object(); lock(SomeCode) { … } } } } 

 (3) using System; using System.Threading; System.Object SomeNameSpace = new System.Object(); lock(SomeNameSpace) namespace SomeNameSpace { public class SomeClass { public void SomeMethod() { … } } } 

 (4) using System; using System.Threading; namespace SomeNameSpace { public class SomeClass { public void SomeMethod() { System.Object SomeCode = new System.Object(lock); { … } } } } 


Номер 3
Вы разрабатываете класс, включающий в себя управление синхронизацией доступа. Поскольку класс содержит большое количество статических методов, наиболее удобным оказалось применение областей синхронизации:
        SomeClass sclass = new SomeClass();
lock(sclass)
	{
…
	}
	

Выберите эквивалентный фрагмент кода:


Ответ:

 (1) SomeClass sclass = new SomeClass(); System.Object object = (System.Object)sclass; System.Threading.Monitor.Enter(object); try { System.Threading.Monitor.Exit(object); } finally { … } 

 (2) SomeClass sclass = new SomeClass(); try { System.Object object = (System.Object)sclass; System.Threading.Monitor.Enter(object); … } finally { System.Threading.Monitor.Exit(object); } 

 (3) SomeClass sclass = new SomeClass(); System.Object object = (System.Object)sclass; System.Threading.Monitor.Enter(object); try { … } finally { System.Threading.Monitor.Exit(object); } 

 (4) SomeClass sclass = new SomeClass(); System.Object object = (System.Object)sclass; try { System.Threading.Monitor.Enter(object); … } finally { System.Threading.Monitor.Exit(object); } 


Упражнение 5:
Номер 1
Вы разрабатываете Windows-приложение, в котором используете автоматическую синхронизацию объектов. Выберите необходимые пространства имен, которые должны присутствовать в коде формы:

Ответ:

 (1) using System; 

 (2) using System.Drawing; 

 (3) using System.Collections; 

 (4) using System.Configuration.Assemblies; 

 (5) using System.Reflection.Emit; 

 (6) using System.ComponentModel; 

 (7) using System.CodeDom.Compiler; 

 (8) using System.Data; 

 (9) using System.Runtime.Remoting.Contexts; 

 (10) using System.Diagnostics; 

 (11) using System.Windows.Forms; 

 (12) using System.Data.Common; 


Номер 2
Вы разрабатываете Windows-приложение, в котором используете ручную синхронизацию объектов. Выберите необходимые пространства имен, которые должны присутствовать в коде формы:

Ответ:

 (1) using System.Configuration.Assemblies; 

 (2) using System.Reflection.Emit; 

 (3) using System; 

 (4) using System.Drawing; 

 (5) using System.ComponentModel; 

 (6) using System.CodeDom.Compiler; 

 (7) using System.Data; 

 (8) using System.Runtime.CompilerServices; 

 (9) using System.Diagnostics; 

 (10) using System.Windows.Forms; 

 (11) using System.Data.Common; 

 (12) using System.Collections; 


Номер 3
Вы разрабатываете Windows-приложение, в котором используете области синхронизации объектов. Выберите необходимые пространства имен, которые должны присутствовать в коде формы:

Ответ:

 (1) using System.Configuration.Assemblies; 

 (2) using System.Reflection.Emit; 

 (3) using System; 

 (4) using System.Threading; 

 (5) using System.Diagnostics; 

 (6) using System.Windows.Forms; 

 (7) using System.Data.Common; 

 (8) using System.Collections; 

 (9) using System.Drawing; 

 (10) using System.ComponentModel; 

 (11) using System.CodeDom.Compiler; 

 (12) using System.Data; 


Упражнение 6:
Номер 1
Вы разрабатываете приложение, в котором элемент ProgressBar отображает процесс копирования файлов.  Для синхронизации величины отображаемого  графического приращения с количеством копируемых файлов вызывается метод PerformStep. Выберите правильный фрагмент кода для задания начальных параметров:

Ответ:

 (1) private void CopyWithProgressBar(string[] filenames) { progressBar1.Visible = true; progressBar1.MinValue = 1; progressBar1.MaxValue = filenames.Length; progressBar1.Value = 1; progressBar1.Step = 1; for (int i = 1; i <= filenames.Length; i++) { if(CopyFile(filenames[i-1]) == true) { progressBar1.PerformStep(); } } }  

 (2) private void CopyWithProgressBar(string[] filenames) { progressBar1.Visible = true; progressBar1.MinimumValue = 1; progressBar1.MaximumValue = filenames.Length; progressBar1.Value = 1; progressBar1.Step = 1; for (int i = 1; i <= filenames.Length; i++) { if(CopyFile(filenames[i-1]) == true) { progressBar1.PerformStep(); } } } 

 (3) private void CopyWithProgressBar(string[] filenames) { progressBar1.Visible = true; progressBar1.Minimum = 1; progressBar1.Maximum = filenames.Length; progressBar1.Value = 1; progressBar1.Step = 1; for (int i = 1; i <= filenames.Length; i++) { if(CopyFile(filenames[i-1]) == true) { progressBar1.PerformStep(); } } }  

 (4) private void CopyWithProgressBar(string[] filenames) { progressBar1.Visible = true; progressBar1.MinValue = 1; progressBar1.MaxValue = filenames.LengthSize; progressBar1.Value = 1; progressBar1.Step = 1; for (int i = 1; i <= filenames.LengthSize; i++) { if(CopyFile(filenames[i-1]) == true) { progressBar1.PerformStep(); } } } 

 (5) private void CopyWithProgressBar(string[] filenames) { progressBar1.Visible = true; progressBar1.Minimum = 1; progressBar1.Maximum = filenames.LengthSize; progressBar1.Value = 1; progressBar1.Step = 1; for (int i = 1; i <= filenames.LengthSize; i++) { if(CopyFile(filenames[i-1]) == true) { progressBar1.PerformStep(); } } } 


Номер 2
Вы разрабатываете приложение, в котором используется асинхронное обновление пользовательского интерфейса. Для этого вы создали метод Upgrade, в котором и происходит обновление:
        private void Upgrade()
{
	// Код для обновления. 
}
	

Далее вы добавили метод, в котором создали экземпляр mi делегата MethodInvoker:

private void AsynchronousUpgrade() { // Асинхронный вызов метода Upgrade MethodInvoker mi = new MethodInvoker(Upgrade); this.BeginInvoke(mi); }

Выберите правильную конструкцию для асинхронного запуска метода Upgrade:


Ответ:

 (1) delegate void DelegateForUpgrade(); private void UpgradeRun_Event(object sender, System.EventArgs e) { DelegateForUpgrade DelForUpg = new DelegateForUpgrade(Upgrade); DelForUpg.BeginInvoke(null, null); } 

 (2) private void UpgradeRun_Event(object sender, System.EventArgs e) { delegate void DelegateForUpgrade(); DelegateForUpgrade DelForUpg = new DelegateForUpgrade(AsynchronousUpgrade); DelForUpg.BeginInvoke(null, null); } 

 (3) delegate void DelegateForUpgrade(); private void UpgradeRun_Event(object sender, System.EventArgs e) { DelegateForUpgrade DelForUpg = new DelegateForUpgrade(AsynchronousUpgrade); DelForUpg.BeginInvoke(null, null); } 

 (4) private void UpgradeRun_Event(object sender, System.EventArgs e) { delegate void DelegateForUpgrade(); DelegateForUpgrade DelForUpg = new DelegateForUpgrade(Upgrade); DelForUpg.BeginInvoke(null, null); } 

 (5) private void UpgradeRun_Event(object sender, System.EventArgs e) { DelegateForUpgrade DelForUpg = new DelegateForUpgrade(Upgrade); DelForUpg.BeginInvoke(null, null); } 


Номер 3
Вы разрабатываете приложение, в котором используется асинхронное обновление пользовательского интерфейса. Для этого вы создали метод Upgrade, в котором и происходит обновление:
        private void Upgrade()
{
	// Код для обновления. 
}
	

Асинхронный запуск метода Upgrade должен происходить в обработчике события Event:

delegate void DelegateForUpgrade(); private void UpgradeRun_Event (object sender, System.EventArgs e) { DelegateForUpgrade DelForUpg = new DelegateForUpgrade(Upgrade); DelForUpg.BeginInvoke(null, null); }

При запуске приложения и при наступлении события Event вы обнаружили, однако, что обновления пользовательского интерфейса не происходит. Укажите причину и способ ее устранения:


Ответ:

 (1) в результате вызова метода UpgradeRun_Event не происходит обновления пользовательского интерфейса в основном потоке. Для решения проблемы необходимо в этом обработчике вызвать метод, в котором будет вызываться метод Upgrade через экземпляр делегата MethodInvoker

 (2) в обработчике реализована некорректная синтаксическая конструкция. Правильный вариант выглядит следующим образом: private void UpgradeRun_Event (object sender, System.EventArgs e) { DelegateForUpgrade DelForUpg = new DelegateForUpgrade(); DelForUpg.Upgrade(); DelForUpg.BeginInvoke(null, null); } 

 (3) в обработчике реализована некорректная синтаксическая конструкция. Правильный вариант выглядит следующим образом: private void UpgradeRun_Event (object sender, System.EventArgs e) { DelegateForUpgrade DelForUpg = new DelegateForUpgrade(); DelForUpg.Upgrade(null); DelForUpg.BeginInvoke(null, null); } 

 (4) в результате вызова метода UpgradeRun_Event не происходит обновления пользовательского интерфейса в основном потоке. Для решения проблемы необходимо в этом обработчике вызвать метод, в котором будет вызываться метод Upgrade через экземпляр делегата EndInvoke 




Главная / Программирование / Создание Windows-приложений на основе Visual C# / Тест 7