User98743 Ответов: 1

Конкатенация строк с +=


Это очень простой вопрос. Насколько я понимаю, += можно использовать для объединения двух строк. Я перестал использовать его, потому что есть что-то, чего я не понимаю.

Я скачал образец кода из Microsoft. Переменная Shown не объявляется как строка и больше нигде в программе. Я знаю, что это неполный класс.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading.Tasks;
using System.Net;
using System.Threading;
using System.Diagnostics;

namespace DownloadAsyncProgress
{
	public partial class frmDownloadAsync : Form
	{
		public frmDownloadAsync()
		{
			InitializeComponent();

			Shown += async ( s, e ) => { txtResult.Text = ( await DownloadAsync() ).Replace( "\n", "\r\n" ) + "Done!"; };
		}

		async Task<string> DownloadAsync()
		{
			Debug.WriteLine( "\nDownloadAsync()" );

			using ( var wc = new WebClient() )
			{
				var progress = new Progress<DownloadStringTaskAsyncExProgress>();

				progress.ProgressChanged += ( s, e ) =>
					{
						Debug.WriteLine( "Progress: " + e.ProgressPercentage + "%" );

						progressBar.Value = e.ProgressPercentage;

						txtResult.Text += e.Text.Replace( "\n", "\r\n" );
					};

				return await wc.DownloadStringTaskAsyncEx( @"http://www.microsfot.com/", progress );
			}
		}
	}
}


Что я уже пробовал:

Код работает. Я ожидал увидеть объявление глобальной переменной, но Shown больше нигде в программе такого нет.

1 Ответов

Рейтинг:
12

OriginalGriff

Начнем с того, что C# не поддерживает (и даже не имеет понятия) глобальных переменных: все содержится в классе. Самое близкое, что он может получить, - это static переменная, доступ к которой осуществляется через имя класса.

Но... вы не можете найти определение showed, потому что его нет в вашем коде - это событие, которое является частью класса Form: Форма.Показаны Мероприятия (Системы.Окна.Формы)[^]


[no name]

Спасибо! Ты можешь подумать о чем async ( s, e ) может быть? Учитывая вашу информацию, я немного ближе, но эти конструкции для меня новы, и я не могу их разобрать и даже не знаю, что искать в данном случае. Я читал об асинхронности, но мой мозг по какой-то причине не понимает ее. Я просто хотел знать, что искать.

OriginalGriff

Начните здесь: https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/async/

Это слишком много, чтобы поместиться в крошечном текстовом поле, как это!

[no name]

Хорошо, я так понимаю, что s и e-это параметры асинхронного метода. Я не знал, что он принимает параметры, и никогда не видел, чтобы кто-то использовал асинхронность с параметрами, поэтому не был уверен.

OriginalGriff

:смех: как еще вы могли бы сказать ему, что обрабатывать?

[no name]

Хотя я думал, что асинхронность-это ключевое слово. Я совсем запуталась, но все в порядке. Я читаю эту статью сегодня.