Category Archives: Pemrograman C# ( si sharp)

Latihan Pemrograman C#

Pengetahuan Dasar C# : Mengirim Nilai Antar Form

Nilai pada form seringkali diperoleh dari nilai form lainnya . Cara mengirim nilai dari form satu ke form lainya sama seperti mengirim nilai dari class yg satu ke class yg lainya yaitu lewat member Public dari Class / form.mengapa demikian ? karena form juga adalah bentuk dari sebuah class.

Langsung saja kita lihat contoh dibawah ini.
Kita akan mengisi sebuah textbox pada form1 dengan nilai dari textbox form2. Nilai form2 yang akan di transfer ke form1 disimpan dalam sebuah Pulic property. Member (class) form yg bersifat public bisa diakses dari (class) form lainya. Pada contoh ini kita akan membuat public property pada (class) form2 dgn nama dataform2.

Bukalah visual studio anda , buatlah dua buah form yaitu form1 dan form2  pada aplikasi C#.

multiform

 Gambar 1. Form1 dan Form 2

 

Nama nama  property dari form1 :

textbox = txtnilaidariform2,   tombol   = btnBukaform2

Nama nama property dari form2 :

textbox = txtnilaiForm2,  tombol ok = btnOk,  tombol cancel = btnCancel.

 

Pada Form2 set property AcceptButton dgn btnOk spt pada  gambar dibawah ini;

profertyorm2

 Gambar 2. Set Property AcceptButton dari Form2

 

Code Program Untuk form1:
using System;
using System.Text;
using System.Windows.Forms;

namespace multiform
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void btnBukaForm2_Click(object sender, EventArgs e)
        {
            Form2 frm2 = new Form2();
            DialogResult result = frm2.ShowDialog(); 

            if (result == DialogResult.OK)
            {
                txtnilaidariForm2.Text = frm2.dataform2;
            }
        }
    }
}

 

Code Program untuk Form2 :

using System;
using System.Text;
using System.Windows.Forms;

namespace multiform
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }

        public string  dataform2
        {
            get
            {
                return txtnilaiForm2.Text;
            }

        }

        private void btnOk_Click(object sender, EventArgs e)
        {
            DialogResult = DialogResult.OK;
            Close();
        }

        private void btncancel_Click(object sender, EventArgs e)
        {
            DialogResult = DialogResult.Cancel;
            Close();
        }
    }
}

DialogResult adalah sebuah enum yg merupakan member dari windows form yg berisi konstanta  sbb:

enum

 

Gambar 3. Enum DialogResult

Sebuah enumerasi adalah type nilai berisi sebuah set nilai nilai konstan dan dibuat menggunakan keyword  “enum” . enumerasi adalah cara yang nyaman untuk mengacu nilai konstan yg digunakan di seluruh program.

Pengetahuan Dasar Membuat Class Library ( file berektensi *.dll) dgn C#

Dalam pembuatan program dgn  C#  supaya lebih  simple,  class class kita pisahkan ke dlm file terpisah  antara lain yg berextensi *.dll atau bisa disebut class library.

Keuntungan dipisahnya code class ke dlm  class library  antara lain:

– Menyederhanakan program

– Class tsb mudah digunakan kembali di program lain.

Langkah langkah membuat  class library.

1.  Buka project baru

2. Pilih kategory class library

3.  Klik menu project properties, rubah output type defaultnya dari “windows application”  menjadi  “class library” .

3. Ketik class yg anda buat , pastikan access modifier class nya public !

misal

namespace  librariku
{
public class librarymu   //  class modifier diset public agar bisa diakses dari luar
{
//code disini
}
}

4. Simpan file project.

kemudian compile dengan perintah sbb:

csc /target:library  namafile.cs

Seperti tampak pd gambar berikut:

compile_classlibrary

jangan lupa sebelumnya set PATH environment dgn tambahan 
;C:\WINDOWS\Microsoft.NET\Framework\v3.5

setpath

Contoh Program Dasar Menggambar Garis dan Kotak di C#

Berikut ini  contoh membuat  grafik sederhana dgn menggunakan C# smoga bermanfaat

temphum

sistim koordinat  image di c#

titik_koordinat

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;

namespace testgraph
{
public partial class Form1 : Form
{
Random angka_random;
Bitmap surface;
Graphics device;
int y1,y2 = 0;
int x1 = 0;
int x2 = 10;
public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
pb.BackColor = Color.Blue;
angka_random = new Random();
//create graphics device
surface = new Bitmap(this.Size.Width, this.Size.Height);
pb.Image = surface;
device = Graphics.FromImage(surface);
}

private void BtnGaris_Click(object sender, EventArgs e)
{
//make a new font
Font font = new Font(“Times New Roman”, 26, FontStyle.Regular,
GraphicsUnit.Pixel);
Color color = Color.Azure;
//make pen out of color
int width = angka_random.Next(2, 8);
Pen pen = new Pen(color, width);
device.DrawString(“Grafik Temperatur”, font, Brushes.Green , 10, 10 + 10);
//draw the line
//device.DrawLine(pen, x1, y1, x2, y2);

device.DrawLine(pen, 10, 300, 510, 300);   // sumbu X
device.DrawLine(pen, 10, 10, 10, 300);        // sumbu Y
device.DrawLine(pen, 10, 50, 500, 50);      //

//refresh the drawing surface
pb.Image = surface;
}

private void btnKotak_Click(object sender, EventArgs e)
{
timer1.Enabled = true;
}

private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
device.Dispose();
surface.Dispose();

}

private void timer1_Tick(object sender, EventArgs e)
{
gambar_kotak();
}
private void gambar_kotak()
{
//make a random color
if (x1 > 400) x1 = 0;
if (y1 > 200) y1 = 30;
if (x2 > 400) x2 = 0;
if (y2 > 200) y2 = 30;

x1 = x1 + 40;
x2 = x2 + 40;

y1 = angka_random.Next(1, this.Size.Height);
y2 = angka_random.Next(1, this.Size.Height);

if (y1> 280) y1 = 20;
if (y2> 280) y2 = 20;
Color color1 = Color.White;
Color color2 = Color.Yellow ;
//make pen out of color

Pen pen1 = new Pen(color1, 9);
Pen pen2 = new Pen(color2, 9);
txtdata_x.Text = x1.ToString();
txtdata_y.Text = y1.ToString();
//Rectangle(x,y.widht,hight)
Rectangle rect1 = new Rectangle(x1,y1, 5, 280-y1); //(x,y.widht,hight)
Rectangle rect2 = new Rectangle(x2, y2, 5, 280 – y2); //(x,y.widht,hight)

//draw the rectangle
device.DrawRectangle(pen1, rect1);
device.DrawRectangle(pen2, rect2);
//refresh the drawing surface
pb.Image = surface;
}

private void btnstopTimer_Click(object sender, EventArgs e)
{
timer1.Enabled = false;
}

}
}

//============

contoh2

//============

linegraph

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Collections;
namespace Charts
{
public partial class Form1 : Form
{
int[] data_graph;
public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
data_graph = new int[] { 1, 2, 3, 5, 2, 10, 4, 11 };
}

private void Form1_Paint(object sender, PaintEventArgs e)
{
DrawLineChart(e, data_graph);
}

private void DrawLineChart(PaintEventArgs e,int[] data_graph)
{
int banyak_data = data_graph.Length;
int panjang_area = 400;
int tinggi_area = 250;
int topX = 20;
int topY = 40;
int nilai_max = cari_nilai_max(data_graph);
int[] height = new int[banyak_data];
int jumlah_tot_data = cari_jumlah_data(data_graph);

SolidBrush brush = new SolidBrush(Color.Aquamarine);
Pen pen = new Pen(Color.Gray);
Rectangle rec = new Rectangle(topX, topY, panjang_area, tinggi_area);
e.Graphics.DrawRectangle(pen, rec);
pen.Color = Color.Red;
int smallX = topX;
// int smallY = 0;
int smallLength = (panjang_area / (data_graph.Length + 1));
int smallHeight = 0;
Point koordinat1 = new Point();
Point koordinat2 = new Point();
for (int i = 0; i < banyak_data; i++)
{
koordinat1 = koordinat2;
koordinat2.X = koordinat2.X + smallLength;
smallHeight = ((data_graph[i] * tinggi_area) / nilai_max);
koordinat2.Y = topY + tinggi_area – smallHeight;
if (koordinat1.X != 0 && koordinat1.Y != 0)
{
e.Graphics.DrawLine(pen, koordinat1, koordinat2);

}

smallX = smallX + smallLength;
}
}
private static int cari_nilai_max(int[] intArray)
{
int maxVal = intArray[0];
for (int i = 0; i < intArray.Length; i++)
{
if (intArray[i] > maxVal)
maxVal = intArray[i];
}
return maxVal;
}
private static int cari_jumlah_data(int[] intArray)
{
int sum = 0;
for (int i = 0; i < intArray.Length; i++)
{

sum += intArray[i];
}
return sum;
}
}
}

Pengetahuan Dasar ADO.NET C# untuk Pemrograman Database

Aplikasi yang kita buat seringkali menyertakan database  untuk menyimpan data  misalnya aplikasi monitoring temperatur , data temperatur harian atau per menit kita simpan di MsAccess , Mysql  atau yg lainya.  Untuk menghubungkan aplikasi berbasisi .NET (dot net) spt  C#, VB.net, ASPX dll  dengan berbagai database  dibutuhkan suatu penghubung  yaitu   ADO.NET . Pada masa sebelumnya  untuk menghubungkan aplikasi dgn database kita  menggunakan  ADO , OLEDB dan ODBC.

Mengenal ADO.NET

ADO.NET merupakan    kumpulan  class yang memberikan  akses ke database serta XML  ditujukan   buat para  programmer  .NET.   Class class  tsb merupakan bagian dari framework .NET  yg terletak  di namespace   system.data.dll

Didalam ADO.NET tersedia berrbagai  data provider spt OLEDB, ODBC dan data provider khusus untuk database tertentu spt untuk SQL server  dan oracle. Selain untuk database  juga tersedia data provider untuk XML.

XML digunakan untuk pertukaran data antar  system yg berbeda contoh sebuah system di linux dgn aplikasi  java dan mysql  akan bertukar data dgn system lain yg mengunakan  os windows dgn aplikasi  C# dan MsAccess . Cara mudah pertukaran data antara dua system tsb  adalah data yg dipertukarkan  mempunyai format yang sama yaitu dlm  bentuk XML. Pada artikel ini sy tdk membahas tentang XML.

Arsitektur ADO.NET

Terdapat 2 kelompok  class utama dlm ADO.Net:
Pertama data provider :    digunakan  untuk koneksi ke database .
Kedua adalah data set :  digunankan untuk menyimpan dan mengelola data. Lebih jelasnya bisa dilihat dlm arsitektur ADO.Net berikut ini:

adonet

Conected dan Disconected

ADO.NET  menyediakan mode conected dan disconected dlm mengelola database.  Pada Mode conected  client memodifikasi data dlm keadaan online  sedangkan mode disconected adalah fitur baru ADO.NET  gambaran mekanismenya antara lain  sbb: client membuka  koneksi ke server database kemudian   data disimpan di  buffer(dataset) client  lalu koneksi server diputus setelah  data diolah baru dibuat  lagi koneksi ke server untuk transfer data. model disconected  spt ini  sangat membantu karena bisa mengurangi trafik data dlm jaringan  terutama jika jumlah client sangat banyak

conected_disconected

Melalui gambar  arsitektur diatas saya ingin memperjelas perbedaan cara mengases database dgn conected ( client dan server database tergubung terus selama  manipulasi data) dgn data reader. dan  disconected , pemilihan kedua  cara tsb tergantung  kebutuhan aplikasi yg kita buat. misalnya untuk mengisi datagridview maka kita gunakan data adafter dan data set sedangkan jika kita ingin mengambil satu baris atau beberapa baris data maka kita gunakan data reader.

Connection
Komponen ini digunakan untuk mengatur koneksi dengan sebuah data source..

Command
command adalah pernyataan SQL atau prosedur yang tersimpan digunakan untuk mengambil, insert, delete atau update data dalam  sebuah data source.

DataReader
Datareader digunakan untuk mengambil data dari database dalam mode read-only dan mode forward.

DataSet
DataSet adalah representasi data di memori . dataset terputus dari database, ia menyimpan cached sejumlah record yang diambil dari database. Ketika sambungan dibuat dengan database, data adapter membuat dataset dan menyimpan data di dalamnya. Setelah data diambil dan disimpan dalam dataset, koneksi dengan database ditutup. Hal ini yg disebut  sebagai ‘arsitektur terputus/disconected’. dataset bekerja sebagai database virtual yg berada di memori  yang berisi tabel.

DataAdapter
DataAdapter merupakan bagian integral dari kerja ADO.Net karena data ditransfer ke dan dari database melalui data adafter. Data adafter mengambil data dari database dan menyimpanya ke dalam dataset selain itu data adafter juga mengupdate database.
Ketika perubahan  terjadi di dataset, perubahan juga terjadi di dalam database yg  dilakukan oleh data adapter

Data Provider
Dataprovider digunakan untuk menghubungkan aplikasi dgn database, mengeksekusi perintah dan mengambil data, menyimpannya dalam dataset, membaca data yang diambil dan memperbarui database.

sedangkan yang dimaksud data provider  adalah  bagian yg spt tampak berikut ini:

dataprovider

Tiap  data provider  mempunyai namespace masing2 yg ada di NET Framework antara lain :

– System.Data.SqlClient  :  data provider  untuk  SQL Server
– System.Data.OracleClient :   data provider untuk  Oracle
– System.Data.Odbc   :  data provider untuk  ODBC
-System.Data.OleDb  :  data provider  untuk  OLEDB

1. Data Provider  untuk  database SQL SERVER

Data Profider SQL Server ada di namespace System.Data.SqlClient. Berikut ini  beberapa class class   yg disediakan  dlm namespace tsb :
– SqlConnection: class yg digunakan untuk koneksi  ke database SQL Server
– SqlCommand   : class yg digunakan untuk mengeksekusi SQL query  atau  store procedures
– SqlDataAdapter: class yg menghubungkan  dataset  dan  database SQL Server
– SqlDataReader :  class yg digunakan untuk membaca database secara read only.

2. Data provider untuk  database ORACLE

Data provider  khusus  untuk database Oracle tersedia di namespace System.Data.OracleClient. Berikut ini  beberapa class class   yg disediakan  dlm namespace tsb :
– OracleConnection
– OracleCommand
– OracleDataAdafter
– OracledataReader

3. Data provider  OLEDB  untuk database dg teknoogi yg lama

OLEDB digunakan untuk database lama antara lain : Pradox, Dbase, MsAccess ,Mysql ,DB2 dan  sql server versi lama. selain itu  OLEDB juga digunakan ketika kita menggunakan 2 database yg berbeda   misal kita menggunakan MsAccess dan SQL server dlm satu aplikasi secara simultan.

Data provider OLEDB harus melalui beberapa layer untuk mengakses database. sehingga lebih efisien anda menggunakan data provider yg spesifik untuk tiap database. mial untuk Oracle gunakanlah data provider  yg ada di System.Data.OracleClient  bgitupun untuk SQL Server lebih efisien menggunakan dataprovider yg tersedia di System.Data.SqlClient dari pada anda menggunakan data provider OLEDB (System.Data.OleDb).

Class class yg digunakan oleh data provider OLEDB  (class class tsb ada di  namespace System.Data.OleDb)  antar lain:

–  OleDbConnection,  class untuk mengkoneksi  database
–  OleDbCommand,   class untuk  menjalankan  SQL query
–  OleDbDataAdapter, class untuk menghubungkan  dataset  dg database
–  OleDbDataReader,   membaca hasil output dari database

classdataprofider
=================teori end=========================

Sekarang waktunya kita akan lihat contoh konkrit  bagaimana aplikasi C# mengakses database secara “conected” dgn objek DataReader .

Contoh1 :   aplikasi console  C#  mengkases database sql server dgn  data provider  SQL Server (using System.Data.SqlClient )  :

using System;
using System.Data.SqlClient;   // namespace data provider sql server
namespace  ContohAksesSqlServer
{
  class ContohSqlServerProvider
  {
   static void Main(string[] args)
    {
   // buat string untuk koneksi
     string  stringKoneksi = @ &amp;amp;quot; server =  .\sqlexpress;  integrated security = true;  database = perpustakaan &amp;amp;quot; ;

    // buat query
    string SQL = @ &amp;amp;quot; select * from  data_buku &amp;amp;quot;;

    // deklarasikan objek  connection dan  data reader
    SqlConnection  koneksi_database = null;
    SqlDataReader  baca_data = null;
   try
    {
  // 1. buka koneksi ke database
     koneksi_database  = new SqlConnection(stringkoneksi);
   koneksi_database.Open();

    // 2. jalankan query
    SqlCommand cmd = new SqlCommand(SQL, koneksi_database);
    // tampilkan judul kolom data
      Console.WriteLine(&amp;amp;quot;Judul buku \t  Pengarang\n&amp;amp;quot;);

    // 3. proses output table

     baca_data = cmd.ExecuteReader();
    while(baca_data.Read())
     {
    Console.WriteLine(&amp;amp;quot;{0} | {1}&amp;amp;quot;, baca_data[0].ToString(baca_data[1].ToString());
     }
    }
  catch (Exception e)
     {
     Console.WriteLine(&amp;amp;quot;Error: &amp;amp;quot; + e);
      }

finally
    {
     //4.  Tutup Koneksi
   koneksi_database.Close();
    }
}
}

Untuk menghubungkan aplikasi C# dng  database sql server selain dengan data provider  khusu untuk sql server spt diatas ( using System.Data.SqlClient) juga bisa dengan OLEDB ataupun dgn ODBC adapun  dimana letak perbedaan utamanya  bisa dilihat di table berikut ini:

perbedaan1

Contoh2 :  Koneksi Aplikasi C#  dg database MsAccess  menggunakan data provider OLEDB (using System.Data.OleDb;)

 https://pccontrol.wordpress.com/2011/08/05/contoh-koneksi-c-dengan-ms-access-2003-mdb-dan-2007-accdb/

contoh3 : koneksi aplikasi C# dengan MYSQL  menggunakan data provider milik mysql  (using MySql.Data.MySqlClient;)

https://pccontrol.wordpress.com/2011/04/28/pemrograman-c-dengan-mysql/

contoh4:  VB.Net dengan database MYSQL

https://pccontrol.wordpress.com/2014/12/17/pengetahuan-dasar-koneksi-vb-net-dan-database-mysql/

Pengetahuan Dasar Pemrograman MultiThread di C#

C# memungkinkan kita mengeksekusi  code secara  parallel melalui  multi-threading.

Apa yg dimaksud dgn Thread

Thread adalah potongan kode yg independent (dari sebuah proses)  yang di ekseskusi oleh CPU yg penjadwalanya di lakukan oleh Operating sytem . Thread dibuat oleh programmer, bagian mana saja yg akan dijadikan thread ditentukan oleh programmer. Setiap thread mendapat jatah waktu  dikerjakan CPU yg disebut quantum.

Perbedaan Multi-Tasking dan Multi-treading

Multitasking adalah beberapa proses aplikasi yang dijalankan secara paralel (sebenarnya sih dijalankan bergantian secara cepat) oleh operating system contohnya anda menjalankan program ms.excel sambil  membuka program  musik WinAmp .  Kita merasakan program  excel dan winamp berjalan bersamaan , padahal sebenarnya CPU diperintahkan oleh  OS mengeksekusi  program excel dan winamp secara bergantian dgn kecepatan tinggi.

Multi-treading adalah beberapa tread potongan program dlm satu proses  yang dilaksana secara paralel (sebenernya sih bergantian secara cepat( kecuali prosesornya multi core)  dan thread dibuat oleh programmer. Contohnya adalah sebuah program server misal chat server maka ia harus melayani permintaan client  yang datang hampir bersamaan secara paralel. server akan membuat thread untuk melayani tiap client yg datang. setiap client dilayani oleh satu thread. sehingga tidak ada antrian jika client yang datang banyak.

Untuk melihat Prosses dan thread yang sedang aktif di OS windows anda bisa menekan Alt+Ctrl+Del  klik menu Task Manager maka akan tampil sbb:

(jika kolom thread tdk tampak , klik menu View ->select colom->di centang/check  thread count.)

Daftar Proses dan jumlah threadnya pada OS windows

Perumpamaan lain multi-threading adalah  Koki di restoran  yang mempunyai anak buah. Untuk setiap pelanggan dilayani oleh 1 anak buah jadi pelanggan tdk perlu menunggu lama. Koki nya adalah program/proses, anak buah kokinya adalah thread.

ilustrasi perbandingan mono thread  dan multi thread

Daur hidup thread

Thread dalam setiap saat mempunyai satu keadaan  dari beberapa keadaan sebagaimana gambar berikut ini:

thrad_lifecycle

Beberapa contoh manfaat Thread

 – Pada user interface

Sebuah proses dlm program biasanya berurutan  spt ini:

Input data->proses data->menampilkan data.

tiap  proses bisa jadi memakan waktu lama.  jika tiap proses di atas masing masing dibuatkan sebuah thread maka  ketika  data sedang di proses input data bisa tetap berlangsung dan ketika proses data sedang berlangsung bisa juga di cancel karena proses diatas berjalan secara paralel.

– Pada aplikasi  server

Misalkan aplikasi webserver , aplikasi ini melayani permintaan page untuk tiap permintaan client yg datang. Tiap client yang datang dilayani oleh 1 thread . jika pada saat yg hampir bersamaan datang 10 client maka akan dibuatkan 10 thread yg melayani secara bersamaan. contoh lain adalah program chat client -server.

Contoh ilustrasi : mencuci tumukan gelas dan piring secara bersamaan
kita buatkan 2 thread . 1 thread untuk mencuci piring dan 1 thread untuk mencuci gelas. sehingga gelas dan piring dicuci  secara paralel.

Multitreading di C#

.NET framework class library   mengelola multithreading di namespace  System.Threading.  adapun class  classnya adalah class thread dan class monitor.   adapun  secara singkat tahapan membuat thread pada program kita adalah
1.  objek thread dibuat   dengan cara
Thread objek_thread = new thread (new Threadstart(obj_methode)
2. lalu thread dimulai dhn methode start.
keterangan:  Threadstart adalah delegate , obj_methode adalah methode yg akan dijalankan delegate threadstart.
Contoh 1 , kita membuat dua buah thread yaitu thread  pertama cuci gelas dan thread kedua cuci piring.
Program mencuci  tumpukan gelas dan tumpukan piring dgn threading

using System;
using System.Threading;   // namespace multithreading

public class MyThread {

public static void Thread1() {
for (int i = 0; i < 10; i++) {
Console.WriteLine(“cuci gelas ke {0}”, i);
Thread.Sleep(3000);
}

}

public static void Thread2() {
for (int i = 0; i < 10; i++) {
Console.WriteLine(“cuci piring ke {0}”, i);
Thread.Sleep(3000);
}
//Thread.Sleep(3000);
}
}

public class MyClass {

public static void Main() {
Console.WriteLine(“mulai mencuci tumpukan gelas dan piring “);

Thread tid1 = new Thread(new ThreadStart(MyThread.Thread1 ) );
Thread tid2 = new Thread(new ThreadStart(MyThread.Thread2 ) );

tid1.Start();
tid2.Start();
}
}

Memang jika di lihat hasil  di layar monitor terlihat secara selang seling, tapi secara tdk terlihat  ke 2 thread di proses paralel.

hasil multithreading di monitor

Hasil program diatas adalah : piring dan gelas di cuci secara bersamaan dan selesai  secara bersamaan.

Kalau program diatas tanpa threading maka hasilnya akan berurutan mencuci gelas sampai selesai baru kemudian mencuci piring sampai selesai.

Program mencuci tumpukan gelas dan piring tanpa threading:

using System;
using System.Threading;

public class non_Thread {

public void cuci_gelas() {
for (int i = 0; i < 10; i++) {
Console.WriteLine(“cuci gelas ke {0}”, i);

}

}

public void cuci_piring() {
for (int i = 0; i < 10; i++) {
Console.WriteLine(“cuci piring ke {0}”, i);

}
}
}

public class MyClass {

public static void Main() {
Console.WriteLine(“=======================================”);
Console.WriteLine(“mulai mencuci tumpukan gelas dan piring “);
Console.WriteLine(“=======================================”);

non_Thread tid1 = new non_Thread();

tid1.cuci_gelas();
tid1.cuci_piring();

Console.WriteLine(“=======================================”);
Console.WriteLine(” Selesai…nyucinya ! “);
Console.WriteLine(“=======================================”);

}
}

program tanpa threading

Hasil dari program diatas adalah: gelas  dicuci  lebih dahulu sampai selseai  kemudian disusul piring.

Contoh ke 2 ,  dua buah thread yaitu iris cabe dan ulek bawang

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;

namespace ConsoleApplication5
{

class ThreadTester
{
static void Main( string[] args )
{
// membuat thread dan beri nama.

kerjaan_thread kerjaan1 = new kerjaan_thread();
Thread thread1 = new Thread ( new ThreadStart( kerjaan1.iris_cabe ) );
thread1.Name = “iris cabe”;

kerjaan_thread kerjaan2 = new kerjaan_thread();
Thread thread2 = new Thread(new ThreadStart(kerjaan1.ulek_bawang ));
thread2.Name = “ulek bawang”;

Console.WriteLine(“================ \n”);
Console.WriteLine( “threads di aktifkan” );
Console.WriteLine(“================ \n”);
// started state -> running state
thread1.Start();
thread2.Start();

Console.WriteLine(“====================================”);
Console.WriteLine( “semua thread (pekerjaan) stand by , siap di kerjakan KOKI ” );
Console.WriteLine(“====================================”);

}

} // end class
class kerjaan_thread
{

private int waktutidur_iriscabe ;
private int waktutidur_ulekbawang ;
private static Random random = new Random();
public kerjaan_thread()
{

waktutidur_iriscabe = 2000;
waktutidur_ulekbawang = 1000;

}
//
public void iris_cabe()
{

for (int i=0; i < 4; i++)
{
Console.WriteLine(“iris cebe ke{0}”, i);
Thread current = Thread.CurrentThread;
Console.WriteLine(current.Name +” diistirahatkan selama ” + waktutidur_iriscabe + ” detik”);
//thread.running -> thread sleeping
Thread.Sleep(waktutidur_iriscabe);
Console.WriteLine(current.Name + “bangun dari istirahat”);
Console.WriteLine(“================ \n”);
}

} // end method masak
public void ulek_bawang()
{
for (int i=0; i< 2; i++)
{
Console.WriteLine(“ulek bawang ke{0}”, i);
Thread current2 = Thread.CurrentThread;
Console.WriteLine(current2.Name + ” diistirahatkan selama ” + waktutidur_ulekbawang + ” detik”);
//thread.running -> thread sleeping
Thread.Sleep(waktutidur_ulekbawang);
// print thread name
Console.WriteLine(current2.Name + ” bangun dari istirahat”);
Console.WriteLine(“================ \n”);
}
}

} // end
}

contoh_thread2

 

Untuk melihat jumlahthread yg running dgn cara  saat program sedang jalan coba anda ketik alt-ctrl-del , kemudian pilih task manager

thread_running

 

syncronisasi thread

Jika ada dua thread yg bersamaan merubah  sebuah data, maka akan terjadi data tdk valid, untuk mencegah ini dibuat mekanisme

THREAD SYNCRON2

Sumber

http://www.codeproject.com/Articles/1083/Multithreaded-Programming-Using-C

– http://www.codeproject.com/Articles/26148/Beginners-Guide-to-Threading-in-NET-Part-1-of-n

– http://www.albahari.info/threading/threading.pdf

– http://www.techrepublic.com/article/a-beginners-guide-to-threading-in-c/1044970

Pengetahuan Dasar C# .Net Micro Framework untuk microcontroller ARM (modul Netduino)

Apa itu .Net Micro Framework?

.Net Micro Framework adalah  flatform NET untuk pemrograman embeded yg terintegrasi dengan Visual studio  ,  menggunakan bahasa pemrograman  C#.

perbandingan Net Micro

Kelebihan .Net Micro:

  • Easily develop powerful, interactive, and complex applications
  • Securely connect devices over wired or wireless protocol
  • Develop full solutions using .NET including devices, servers, and the cloud
  • Rich base class library
Kekurangan dari .Net Micro
Exsekusi program .net micro  lebih lambat dari pemrograman native code  (asembler atau bhs c) .

Sofware yg dibutuhkan


1. Microsoft Visual C# Express 2010

2. Microsoft .NET Micro Framework v4.1 SDK

3.  Netduino1 SDK 4  (disediakan oleh  SecretLabs)

(jika anda menggunakan modul selain netduino maka kebutuhan software no 3 juga di sesuaikkan dgn modul yg anda gunakan)

Hardware

Modul hardware yang kita gunakan  adalah Netduino  sebuah open-source electronic  platform  yg menggunakan  .NET Micro Framework .  Rangkaiannya ada disini .  Kalau mau beli sepertinya sudah ada di prasimax.

saat ini Netduino ada 3 model

1. Netduino

2. Netduino mini

3. Netduino plus

Netduino spec

Membuat Project Baru

1. Buka Visual Studio atau C# express

2. New Project

3. Pilih template Micro Framework spt tampak dibawah ini , sesuaikan dgn modul netduino yg anda miliki.

Tanpilan Menu pilihan C# micro

5. Klik program.cs

copy dan pasta program    C# Net Micro  Netduino  berikut ini.

using System;
using System.Threading;
using Microsoft.SPOT;
using Microsoft.SPOT.Hardware;
using SecretLabs.NETMF.Hardware;
using SecretLabs.NETMF.Hardware.Netduino;
public class BlinkingLed
{
public static void Main()
{
var ledPort = new OutputPort(Pins.ONBOARD_LED, false);
while (true)
{
ledPort.Write(true);               //  LED on
Thread.Sleep(500);              // delay 500 ms
ledPort.Write(false);           //  LED off
Thread.Sleep(500);           // delay 500 ms
}
}
}

6. klik menu Debug->Build Solution

Jika sukses maka kita bisa melanjutkan dengan mengirim program yang sudah di buld ke Modul melalui port komunikasi USB.

Langkah mentrasfer program yg sudah dibuild ke modul sebagai berikut

1. klik kanan pada project dan klik properties

net micro project properties

2.  klik tab menu .NET Micro Framework. kemudian set spt gambar  antara lain:

  • Configuration  :  Active (Debug)
  • Platform             :  Active (Any CPU)
  • Transport          :   USB
  • Device                :   select your Netduino from the drop-down list.
  • Generate native stubs for internal methods  :    unchecked

Properties net microframework

Kalau pada isian text boxt  “Device”  kosong , kita harus mengkoneksi modul netduino ke PC kita dulu lewat port  USB nya.

3. Klik menu Debug-Start Debugging , maka program akan ditransfer ke Modul Netduino.

Untuk menghapus program di modul gunakan MFDeploy lokasinya ada di :

C:\Program Files\Microsoft .NET Micro framework\v4.1\Tools\MFDeploy.exe

Tool MFDeploy net Micro framework

Langkah langkah Menghapus program di Modul Netduino

1. Buka MFDeploy  pastikan  pilih “USB” pada  pilihan Device spt pd gambar diatas.

2.  Cabut dan pasang kembali USB cable  sambil tombol di netduino ditekan.

3. lepas tombol dan klik erease pada MFDeploy.

selesai.

Contoh 2  membaca penekanan tombol

using System;
using System.Threading;
using Microsoft.SPOT;
using Microsoft.SPOT.Hardware;
using SecretLabs.NETMF.Hardware;
using SecretLabs.NETMF.Hardware.Netduino;

namespace ButtonApp
{
public class Program
{
public static void Main()
{
// write your code here
OutputPort led = new OutputPort(Pins.ONBOARD_LED, false);
InputPort button = new InputPort(Pins.ONBOARD_SW1, false, Port.ResistorMode.Disabled);
bool buttonState = false;

while (true)
{
buttonState = button.Read();
led.Write(!buttonState);
}

}

}
}

Untuk  memperdalam C# .Net Micro Framework  ada baiknya  anda  pelajari juga  dasar  bahasa pemrograman C#   .

sumber

http://www.netduino.com

– http://www.microsoft.com/en-us/netmf/default.aspx