receive data from ardruino to visual studio micro

Hi Forum
I couldnt receive data from ardruino to visual studio micro . Can you help me .Hereby I attached my code.

Imports System.IO
Imports System.IO.Ports
Imports System.Threading

Public Class Form1
    Shared _continue As Boolean
    Shared _serialPort As SerialPort
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        SerialPort1.Close()
        SerialPort1.PortName = "com4" 'change com port to match your Arduino port
        SerialPort1.BaudRate = 9600
        SerialPort1.DataBits = 8
        SerialPort1.Parity = Parity.None
        SerialPort1.StopBits = StopBits.One
        SerialPort1.Handshake = Handshake.None
        SerialPort1.Encoding = System.Text.Encoding.Default 'very important!
    End Sub
    

    Private Sub Start_Click(sender As Object, e As EventArgs) Handles Start.Click
        SerialPort1.Open()
        SerialPort1.Write("1")
        SerialPort1.Close()
    End Sub

    Private Sub Button1_Click_1(sender As Object, e As EventArgs) Handles Button1.Click
        SerialPort1.Open()
        SerialPort1.Write("0")
        SerialPort1.Close()
    End Sub

    Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived

        Dim message As Integer

        message = SerialPort1.ReadLine()

        Label1.Text = message

    End Sub


End Class

Ardruino code

volatile int rpmcount = 0;
int rpm = 0;
unsigned long lastmillis = 0;
int motorPin = 9; // motor connected to digital pin 9
//int analogPin = 0; // potentiometer connected to analog pin 0
int val = 0; // variable to store the read value

void setup()
{
pinMode(motorPin, OUTPUT); // sets the pin as output
Serial.begin(9600);
attachInterrupt(0, rpm_motor, FALLING);//interrupt cero (0) is on pin two(2).
}

void loop()
{
if (Serial.available())
{
int val = Serial.parseInt();
if (val >= 0 && val <= 255)
{
analogWrite(motorPin, val / 4);
}
}
// analogRead values go from 0 to 1023, analogWrite values from 0 to 255
if (millis() - lastmillis == 1000){ //Uptade every one second, this will be equal to reading frecuency (Hz).

detachInterrupt(0); //Disable interrupt when calculating

rpm = rpmcount * 60; // Convert frecuency to RPM, note: this works for one interruption per full rotation. For two interrups per full rotation use rpmcount * 30.

Serial.print(“RPM =\t”); //print the word “RPM” and tab.
Serial.print(rpm); // print the rpm value.
Serial.print("\t Hz=\t"); //print the word “Hz”.
Serial.println(rpmcount); //print revolutions per second or Hz. And print new line or enter.

rpmcount = 0; // Restart the RPM counter
lastmillis = millis(); // Uptade lasmillis
attachInterrupt(0, rpm_motor, FALLING); //enable interrupt
}
}
void rpm_motor(){ // this code will be executed every time the interrupt 0 (pin2) gets low.
rpmcount++;
}