Хочется без лишних проблем создавать красивый интерфейс для своих программ, но возникает вопрос, как? Способов много, я уже описывал один, опишу сейчас еще один.
У меня в наличии всего две версии:
AeonSofts Theme Designer
Aeonsofts Theme Manager v2.0
Первая более новая (как мне кажется), т.к в ней мы можем сгенерировать код для отельных элементов, в отличии от второй, где получаем сразу все, без выбора.
Создаем новый проект и запускаем AeonSofts Theme Designer
Dim lnSize As Single = RichTextBox1.Font.Height + RichTextBox1.Font.GetHeight
Dim nBufferSize As Integer = CInt(Math.Truncate(RichTextBox1.ClientSize.Height / lnSize * 2))
Static i As Integer : i += 1
Static lnBuffer As New List(Of String)(Enumerable.Repeat(Environment.NewLine, nBufferSize))
If (lnBuffer(0) = Environment.NewLine) Then
lnBuffer.RemoveAt(0)
End If
lnBuffer.Add(Now.ToLongTimeString & " : " & TextBox1.Text)
RichTextBox1.Lines = lnBuffer.ToArray
RichTextBox1.ScrollToCaret()
RichTextBox1.SelectionStart = RichTextBox1.Text.Length
RichTextBox1.ScrollToCaret()
Imports System.Net
Imports System.IO
Public Class Form1
WithEvents WC As New WebClient
Dim UrlFile As Uri = New Uri("D:\Hard\1.msi")
Dim Leng As Long
Public Sub New()
' Этот вызов необходим конструктору форм Windows.
InitializeComponent()
Dim FI As FileInfo = New FileInfo(UrlFile.LocalPath)
Leng = FI.Length
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
WC.DownloadFileAsync(UrlFile, "D:\1.msi")
End Sub
' Процедура "копирования"
Sub DPC(ByVal sender As Object, ByVal e As System.Net.DownloadProgressChangedEventArgs) Handles WC.DownloadProgressChanged
ProgressBar1.Maximum = Leng \ 1024 ' Max
ProgressBar1.Value = e.BytesReceived \ 1024 ' Value
Text = e.BytesReceived \ 1024 & " Кб" ' KbReceived
End Sub
' Копирование завершено
Private Sub DFC(ByVal sender As Object, ByVal e As System.ComponentModel.AsyncCompletedEventArgs) Handles WC.DownloadFileCompleted
If e.Error Is Nothing Then
MsgBox("OK")
Else
MsgBox(e.Error)
End If
End Sub
По началу хотел реализовать графически, но не совсем пока разобрался, как применять нужные мне формулы, так что сделал этакое "простое" чудо. Как разберусь с графическим, обязательно покажу.
Для чего нужно знать время выполнения того или иного участка кода? Допустим у вас есть два варианта кода, которые выполняют одно и тоже. Тогда с помощью замеров, можно просмотреть, какой вариант выполнится быстрей и исходя из этих данных делать выводы.
Сегодня разберем два примера.
Первый пример:
Класс StopWatch унаследованный от System.Diagnostics
VB.NET:
Imports System.Diagnostics
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim SW As New Stopwatch 'Создаем объект
SW.Start() 'Запускаем
System.Threading.Thread.Sleep(1000) 'Наш код
SW.Stop() 'Останавливаем
MsgBox(SW.ElapsedMilliseconds) 'Время выполнения в миллисекундах
MsgBox(SW.Elapsed.Seconds) 'Время выполнения в секундах
MsgBox(SW.ElapsedTicks) 'Тики
End Sub
End Class
C#:
using System.Diagnostics;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Stopwatch SW = new Stopwatch(); // Создаем объект
SW.Start(); // Запускаем
System.Threading.Thread.Sleep(1000); // Наш код
SW.Stop(); //Останавливаем
MessageBox.Show(Convert.ToString(SW.ElapsedMilliseconds)); // Время выполнения в миллисекундах
MessageBox.Show(Convert.ToString(SW.Elapsed.Seconds)); // Время в секундах
MessageBox.Show(Convert.ToString(SW.ElapsedTicks)); // Время в тиках
}
}
}
Этот класс содержит методы использования интерфейса IMediaDet, что можно найти в Microsoft DirectShow. Объекты Media Detector, среди прочего, могут быть использованы для извлечения стоп-кадров из нескольких форматов файлов, включая *. AVI, *. WMV и некоторых *. файлов MPEG.
Protected Overrides ReadOnly Property CreateParams() As CreateParams
Get
Dim myparam As CreateParams = MyBase.CreateParams
myparam.ClassStyle = myparam.ClassStyle Or &H20000
Return myparam
End Get
End Property