|
Eddy Vluggen wrote: Most virusscanners wouldn't recognize your "virus" because they don't have a signature to recognize.
offcourse...
<blockquote class="FQ"><div class="FQA">Eddy Vluggen wrote:</div>Once it has been caught in the wild and analyzed the scanner will pick it up (based on actions, signatures, file-hashes) without much ado</blockquote>
not correct in every detail, lets say this way it is organic it changes/modifies all actions,hashes, sizes, places, aaaahhh much of that
Eddy Vluggen wrote: We could ask someone from Symantec or MacAfee to verify it using your code, if you desire? Smile
nonono i leave my sources private! that way i have more freedom.
|
|
|
|
|
First let me describe what my program does:
I created a data entry program and a user manually enters data on that is supplied from the screen on an instrument we use. The instrument needs to be calibrated at the start of a job, at the end, and every four hours. I would like to have the program display a message before the four hour mark so that the user remembers to do the calibrations.
The way I have the program now is that when the app is started a new thread is created (CalMonitor ) that basically counts the time. What I need to do is be able to send data to the CalMonitor thread when the user enters the calibrations to reset the timing. How would I go about pass data to a currently running thread?
Thanks in advanced
|
|
|
|
|
Hi,
the easiest way for a WinForms app to get something done in the future is by launching a timer; in particular a System.Windows.Forms.Timer as it will cause a Tick event which executes on the main thread, so you can easily share your data and your GUI Controls with it.
|
|
|
|
|
Hopefully, you created a new class for the CalMonitor. That CalMonitor class should have a couple of things. One, an event that can fire when you want to send the re-calibrate message. The second is a variable that holds a time that it was last reset. The third is a sub that checks if it was reset recently enough, then if it wasn't, raises the event, and if it was, sleeps until the next re-calibration needs to be done.
Here's an example class that I just wrote up and tested:
Public Class CalMonitor
Private _lastReset As DateTime
Private Const SecondsBetweenCalibrationsAllowed As Integer = 30
Private _abort As Boolean
Public Event TimeToCalibrate()
Public Event ResetSuccessful()
Public Sub New()
_lastReset = DateTime.Now
_abort = False
End Sub
Public Sub StartMonitor()
While Not _abort
Dim timeSinceLastReset As TimeSpan = DateTime.Now.Subtract(_lastReset)
If timeSinceLastReset.TotalSeconds > SecondsBetweenCalibrationsAllowed Then
RaiseEvent TimeToCalibrate()
Threading.Thread.Sleep(5000)
Else
If ((SecondsBetweenCalibrationsAllowed - _
timeSinceLastReset.TotalSeconds) * 100) < 5000 Then
Threading.Thread.Sleep((SecondsBetweenCalibrationsAllowed - _
timeSinceLastReset.TotalSeconds) * 100)
Else
Threading.Thread.Sleep(5000)
End If
End If
End While
End Sub
Public Sub CalibrationReset()
_lastReset = DateTime.Now
RaiseEvent ResetSuccessful()
End Sub
Public Sub StopMonitor()
_abort = True
End Sub
End Class
Then, the form looks like:
Public Class Form1
Private myCalMonitor As CalMonitor
Private calMonitorThread As Threading.Thread
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles MyBase.Load
myCalMonitor = New CalMonitor
AddHandler myCalMonitor.TimeToCalibrate, AddressOf CalMonitor_TimeToReset
calMonitorThread = New Threading.Thread(AddressOf myCalMonitor.StartMonitor)
calMonitorThread.Start()
End Sub
Private Sub Form1_FormClosed(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
myCalMonitor.StopMonitor()
Me.Hide()
calMonitorThread.Join()
End Sub
Private Sub CalMonitor_TimeToReset()
MessageBox.Show("Time to reset calibration")
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles Button1.Click
myCalMonitor.CalibrationReset()
End Sub
End Class
modified on Thursday, April 8, 2010 7:00 PM
|
|
|
|
|
This seems to be what I was looking for. I already had the CalMonitor in a separate class, but I was trying to do a Dim WithEvents and because I have multiple forms that may be opening and closing I was having trouble handling the CalMonitor thread. But I think I can see how I can use this. I've used multi-threading before but still pretty novice at it. I'm definitely going to give this a try. Much Appreciated!
|
|
|
|
|
I tried your code, with some minor modifications. Instead of just have the cal. reset time, I added other levels (a warning level, and critical level) to give the user notice that calibrations are coming up. However, the form freezes once the CalMonitor thread goes to sleep. Here is my CalMonitor class:
Public Class clsCalMonitor
Private Const WARNING_TIME As Integer = 12600 '3.5 hours
Private Const CRITICAL_TIME As Integer = 13800 '3 hours 50 minutes
Private Const OVER_TIME As Integer = 14400 '4 hours
Private _lastReset As DateTime
Private _abort As Boolean
Public Event Cal_Warning()
Public Event Cal_Critical()
Public Event Cal_Over()
Public Event Cal_ResetSuccessful()
Public Event MonitorStopped()
Private Sub Monitor()
While Not _abort
Dim timeSinceLastReset As TimeSpan = DateTime.Now.Subtract(_lastReset)
If timeSinceLastReset.TotalSeconds >= WARNING_TIME AndAlso timeSinceLastReset.TotalSeconds < CRITICAL_TIME Then
RaiseEvent Cal_Warning()
Threading.Thread.Sleep(5000)
ElseIf timeSinceLastReset.TotalSeconds >= CRITICAL_TIME AndAlso timeSinceLastReset.TotalSeconds < OVER_TIME Then
RaiseEvent Cal_Critical()
Threading.Thread.Sleep(5000)
ElseIf timeSinceLastReset.TotalSeconds >= OVER_TIME Then
RaiseEvent Cal_Over()
Threading.Thread.Sleep(5000)
Else
Threading.Thread.Sleep(5000)
End If
End While
End Sub
Public Sub CalibrationReset()
_lastReset = DateTime.Now
RaiseEvent Cal_ResetSuccessful()
End Sub
Public Sub StartMonitor()
_lastReset = DateTime.Now
_abort = False
Monitor()
End Sub
Public Sub StopMonitor()
_abort = True
RaiseEvent MonitorStopped()
End Sub
And in my main form I have:
Public Sub ReceiveFile(ByRef ReceivedFile As clsJBXFile, Optional ByVal NewJob As Boolean = True)
StateFlag = (StateFlag Or StateType.Loading)
CalMonitor = New clsCalMonitor
CalMonitorThread = New Threading.Thread(AddressOf CalMonitor.StartMonitor)
CalMonitor.StartMonitor()
AddHandler CalMonitor.Cal_Warning, AddressOf CalMonitor_Warning
AddHandler CalMonitor.Cal_Critical, AddressOf CalMonitor_Critical
AddHandler CalMonitor.Cal_Over, AddressOf CalMonitor_Warning
JBXFile = ReceivedFile
LoadRooms()
LoadCustoms()
LoadSettings()
SaveCounter = 0 'Reset Save Counter to 0
CurrentReadingNumber = 1 'Reset CurrentReadingNumber to the first reading
If NewJob Then
SetForNewJob()
Else
SetForPreviousJob()
End If
StateFlag = (StateFlag And Not StateType.Loading)
MessageFlag = MessageType.None
End Sub
I declared the Public CalMonitor as clasCalMonitor and Public CalMonitorThread as Threading.Thread in a module. Is for some reason cause the main form to freeze when the thread in the cal. monitor thread sleeps?
|
|
|
|
|
Never mind...I realized my error. I call to start the monitor directly instead of starting the thread.
|
|
|
|
|
Yeah...it's easy to do...glad it's working out for you.
Just as an FYI, the reason I was having it sleep for 5 seconds was just so that when you tell it to stop, it doesn't have to wait a long time for the thread to "wake up" to check if it's supposed to stop.
|
|
|
|
|
please help me to found the reason of this message (SEHException was unhandled)
I read the subject about
(Reading from Parallel Port using Inpout32.dll
By phebejtsov)then write my project as you write but in vb.net2008 and when I run it show this message
(SEHException was unhandled External component has thrown an exception)
modified on Thursday, April 8, 2010 12:56 PM
|
|
|
|
|
|
Thank you very much but I can't download the update can you give me the exact link
|
|
|
|
|
I can't, I never used it, all I did was locate that discussion using Google.
You may need some more Google actions to locate an up-to-date dll yourself.
BTW: when you answer to a message, the author gets a mail notification; when you answer to your own message, nobody gets notified; it is only by accident that I noticed your "reply".
|
|
|
|
|
thank you How can I do a mail notification
|
|
|
|
|
Mail notifications are automatic:
when person A posts a reply to an existing message by person B on one of the message boards ("forums"), B will automatically get a mail notification if he has indicated that is what he wants (menu Settings, tab Forums, first checkbox); the sender (person A) has no say in this, it is automatic.
BTW: there will be no notification if A and B are one and the same.
|
|
|
|
|
I had below listed error when I run my program
It works if I selected a different Port.
and it used to work before. I list my program below and the error message. Can anyone tell what is the problem?
Thanks
cbbCOMPorts.SelectedItem = "COM2"
With serialPort
.PortName = cbbCOMPorts.Text
.BaudRate = 9600
.Parity = IO.Ports.Parity.Even
.DataBits = 7
.StopBits = IO.Ports.StopBits.One
.Encoding = System.Text.Encoding.ASCII
.Handshake = IO.Ports.Handshake.XOnXOff
End With
serialPort.Open()
Error Message
"System.IO.IOException: The Operation completed succesfully.
at System.IO.Ports.InternalResources.WinIOError(Int32 ErrorCode, String Str)
at System.IO.Ports.SerialStream..ctor(Sring portName, Int32 baudRate, Parity parity, Int32 dataBits, StopBits, Int32 readTimeout, Int32 writeTimeout, Handshake handshake, Boolean dtrEnable, Boolean rtsEnable, Boolean discardNull, Byte parityReplace)
at System.IO.Ports.SerialPort.Open()
at Lecom_Test_Simulated_Drive.MainPage.bnConnect_Click(Object sender, EventArgs e) in D:\Projects\Lecom Test Simulated Drive\Lecom Test Simulated Drive\Main Page.vb:line 78"
|
|
|
|
|
albchinsh wrote: System.IO.IOException: The Operation completed succesfully
Surely this is not the correct exception message
Steve Jowett
-------------------------
Real programmers don't comment their code. If it was hard to write, it should be hard to read.
|
|
|
|
|
This is exactly the message
"System.IO.IOException: The Operation completed succesfully.
at System.IO.Ports.InternalResources.WinIOError(Int32 ErrorCode, String Str)
at System.IO.Ports.SerialStream..ctor(Sring portName, Int32 baudRate, Parity parity, Int32 dataBits, StopBits, Int32 readTimeout, Int32 writeTimeout, Handshake handshake, Boolean dtrEnable, Boolean rtsEnable, Boolean discardNull, Byte parityReplace)
at System.IO.Ports.SerialPort.Open()
at Lecom_Test_Simulated_Drive.MainPage.bnConnect_Click(Object sender, EventArgs e) in D:\Projects\Lecom Test Simulated Drive\Lecom Test Simulated Drive\Main Page.vb:line 78"
Line 78 is SerialPort.Open()
I had Try..Catch statement enclosing this line
with MsgBox(ex.ToString)
|
|
|
|
|
Still have the problem?
This is what i have used previously to communicate with Serial Ports;
Declarations;
Private WithEvents port As IO.Ports.SerialPort
Port Selection via ComboBox;
Private Sub LoadSerialPortNameList()
ComboBoxSerialPorts.Items.Clear()
For Each item As String In My.Computer.Ports.SerialPortNames
ComboBoxSerialPorts.Items.Add(item)
Next
End Sub
Port Connection via button;
'Check a port is selected
If ComboBoxSerialPorts.SelectedIndex < 0 Then
MsgBox("Select a serial port from the drop down list")
Else
Try
port = My.Computer.Ports.OpenSerialPort(ComboBoxSerialPorts.Items.Item(ComboBoxSerialPorts.SelectedIndex))
Catch ex As Exception
MsgBox("Error Opening Port: " + ex.Message)
End Try
End If
Port Disconnection via button;
If port.IsOpen Then
port.Close()
Debug.WriteLine("Port Closed")
Else
MsgBox("Port is already closed.")
End If
Notice the use of the My.Computer.Ports methods, don't know if that helps you any, but worked for me in the past no problem.
One of the biggest hassles was during dev/testing, if your app bombs, the OS seems to retain the lock on the port resource, leading to connection failures on subsequent runs, needing a reboot to release them.
|
|
|
|
|
Still not possible.
If I changed the same physical port to COM11 (Via control panel)
then it will work.
I wonder what happened to COM2?
|
|
|
|
|
did you try a reboot? AFAIK there are some issues with serial ports loosing their health till reboot.
|
|
|
|
|
Tried Reboot but still not working for COM2
IT will work if I set the same physical port to COM11
DO Not Know why??????????
|
|
|
|
|
I have a winform with a datagridview bound to a dataview. I read in various delimited files with the first row as column headers. I build a datatable in memory & then instantiate the dataview and then bind it to the datagridview. I have a modal form that allows the user to select a column from a combobox & enter a list of values in a multiline textbox. I use the user input to set the dataview.rowfilter property but the datagridview only reflects rows with the first value from the list.
Try
If searchRecords.ShowDialog(Me) = Windows.Forms.DialogResult.OK Then
Dim filterString As New StringBuilder
If searchRecords.SearchValues.Count > 1 Then
filterString.Append(searchRecords.SelectedColumn)
filterString.Append(String.Format(" IN ('{0}'", searchRecords.SearchValues(0).ToString))
For i As Integer = 1 To searchRecords.SearchValues.Count - 1
filterString.Append(String.Format(",'{0}'", searchRecords.SearchValues(i).ToString))
Next
filterString.Append(")")
Else
filterString.Append(searchRecords.SelectedColumn)
filterString.Append(" = ")
filterString.Append(String.Format("'{0}'", searchRecords.SearchValues(0).ToString))
End If
_RecordTable.GetView.RowFilter = filterString.ToString
_RecordTable.GetView.RowStateFilter = DataViewRowState.CurrentRows
End If
Catch ex As Exception
Throw ex
End Try
So if the user provides more than one value the filter string would look something like this "columnName IN ('value1','value2','value3')". The result in the datagridview displays only rows with value1 in the columnName column. I have used the exact same code to filter a dataview instantiated with a SQL table & it works. I can't figure out why this code does not work & no one I've asked can explain. Please help!
|
|
|
|
|
I am working on ur issue but i am not able to figure out
the _RecordTable object.
Can u mention what is the type of _RecordTable.
Tej Aj,
http://opexsolution.com/forum/
|
|
|
|
|
_RecordTable is of Type RecordTable which is a class that I built.
Imports System.IO
Imports System.Text
Imports Microsoft.VisualBasic.FileIO
Public Class RecordTable
Private WithEvents _DT As New DataTable
Private _DTList As New List(Of DataTable)
Private _ColumnNames As List(Of String)
Private _FileName As String
Private _TableChanged As Boolean
Private WithEvents _DV As New DataView(_DT)
Friend ReadOnly Property GetView As DataView
Get
Return _DV
End Get
End Property
Friend ReadOnly Property GetTable As DataTable
Get
Return _DT
End Get
End Property
Friend ReadOnly Property DTList As List(Of DataTable)
Get
Return _DTList
End Get
End Property
Friend Property ColumnNames As List(Of String)
Get
Return _ColumnNames
End Get
Set(ByVal value As List(Of String))
_ColumnNames = value
End Set
End Property
Friend Property FileName As String
Get
Return _FileName
End Get
Set(ByVal value As String)
_FileName = value
End Set
End Property
Friend Property TableChanged As Boolean
Get
Return _TableChanged
End Get
Set(ByVal value As Boolean)
_TableChanged = value
End Set
End Property
Public Sub New()
AddHandler _DT.RowChanged, New DataRowChangeEventHandler(AddressOf TableHasChanged)
End Sub
#Region "Form Routines"
Friend Sub ReadRecords()
Dim recordX As Integer = 0
Dim dr As DataRow
Try
_DT.Clear()
Using parser As New TextFieldParser(FileName)
parser.SetDelimiters("|")
While Not parser.EndOfData
' Read in the fields for the current record
Dim fields As String() = parser.ReadFields()
Dim columns As String()
' Add record to data table
If recordX = 0 Then
Dim columnNames As New List(Of String)
columns = fields
For Each column As String In columns
columnNames.Add(column)
_DT.Columns.Add(column)
Next
Me.ColumnNames = columnNames
recordX += 1
Else
Dim i As Integer = 0
dr = _DT.NewRow
For Each field As String In fields
dr.Item(Me.ColumnNames(i)) = field
i += 1
Next
_DT.Rows.Add(dr)
recordX += 1
End If
End While
End Using
_TableChanged = False
Catch ex As Exception
Throw ex
End Try
End Sub
Friend Sub SaveFileAs()
Dim recordBuilder As New StringBuilder
Try
Using outputWriter As New StreamWriter(FileName, False, Encoding.UTF8)
For Each column As DataColumn In _DT.Columns
If _DT.Columns.IndexOf(column.ColumnName) = 0 Then
recordBuilder.Append(column.ColumnName)
Else
recordBuilder.Append(String.Format("|{0}", column.ColumnName))
End If
Next
outputWriter.WriteLine(recordBuilder.ToString)
recordBuilder.Clear()
For Each row As DataRow In _DT.Rows
For Each column As DataColumn In _DT.Columns
If _DT.Columns.IndexOf(column.ColumnName) = 0 Then
recordBuilder.Append(row.Item(column.ColumnName).ToString)
Else
recordBuilder.Append(String.Format("|{0}", row.Item(column.ColumnName).ToString))
End If
Next
outputWriter.WriteLine(recordBuilder.ToString)
recordBuilder.Clear()
Next
End Using
TableChanged = False
Catch ex As Exception
Throw ex
End Try
End Sub
Friend Sub SaveFile()
Dim recordBuilder As New StringBuilder
Try
Using output As New FileStream(FileName, FileMode.OpenOrCreate, FileAccess.Write), _
outputWriter As New StreamWriter(output, Encoding.UTF8)
For Each column As DataColumn In _DT.Columns
If _DT.Columns.IndexOf(column.ColumnName) = 0 Then
recordBuilder.Append(column.ColumnName)
Else
recordBuilder.Append(String.Format("|{0}", column.ColumnName))
End If
Next
outputWriter.WriteLine(recordBuilder.ToString)
recordBuilder.Clear()
For Each row As DataRow In _DT.Rows
For Each column As DataColumn In _DT.Columns
If _DT.Columns.IndexOf(column.ColumnName) = 0 Then
recordBuilder.Append(row.Item(column.ColumnName).ToString)
Else
recordBuilder.Append(String.Format("|{0}", row.Item(column.ColumnName).ToString))
End If
Next
outputWriter.WriteLine(recordBuilder.ToString)
recordBuilder.Clear()
Next
End Using
TableChanged = False
Catch ex As Exception
Throw ex
End Try
End Sub
Friend Function GetUniqueFileName()
Dim i As Integer = 2
Dim uniqueFileName As String = FileName
While My.Computer.FileSystem.FileExists(uniqueFileName)
uniqueFileName = String.Format("{0}{1}", uniqueFileName, i)
i += 1
End While
Return uniqueFileName
End Function
Private Sub TableHasChanged(ByVal sender As Object, ByVal e As DataRowChangeEventArgs)
TableChanged = True
End Sub
Friend Function CheckTableUpdates()
Try
If TableChanged Then
Dim result As DialogResult = MessageBox.Show("Would you like to save your changes?", "Save Changes", MessageBoxButtons.YesNoCancel, _
MessageBoxIcon.Question, MessageBoxDefaultButton.Button1)
Return result
Else
Return Nothing
End If
Catch ex As Exception
Throw ex
End Try
End Function
#End Region
End Class
The link in your other post was not really helpful. I am able to get the results I'm looking for when connecting to a SQL table but my problem is that it doesn't work correctly for this application where my datatable is built dynamically in memory from a delimited flat text file. Thank you so much for trying to help me figure this one out. I hope showing you the RecordTable object will shed some light. If you have any other questions please let me know.
|
|
|
|
|
Check if the below Link's example can be helpful to u
http://opexsolution.com/forum/viewtopic.php?f=17&t=19&p=50#p50
|
|
|
|
|