This videos shows how to create simple wpf -thread application,gives an overview of how to use "Dispatcher" object in WPF.
Below extension method will allow us to update any controls in thread safe manner.
public static class ControlExtension
{
public static void UpdateControlSafe(this Control control, Action code)
{
if (!control.Dispatcher.CheckAccess())
control.Dispatcher.BeginInvoke(code);
else
code.Invoke();
}
}
Sunday, 1 November 2009
Monday, 29 June 2009
Generic InvokeRequired pattern - (C# Multi-Threading)
Tody I read article on InokeRequired patterns posted in code project ( Read Full Article )
I have wrote more generic version of the same ( Less code !!!!! ...clear & crisp...)
public static class ControlExtension
{
public static void UpdateControl(this Control control, MethodInvoker code)
{
if (control.InvokeRequired) {
control.Invoke(code);
}
else{
code.Invoke();
}
}
using 'Control' type param in Extension mentod give us an advantage to call UpdateControl on any control.
for eg:- In the below example I have called 'UpdateControl' extension method on textbox control.
private void btnUpdate_Click(object sender, EventArgs e)
{
Thread th = new Thread(new ThreadStart( () => txtInfo.UpdateControl(Display) ) );
th.Start();
}
private void Display()
{
txtInfo.Text += "Updated";
}
I have wrote more generic version of the same ( Less code !!!!! ...clear & crisp...)
public static class ControlExtension
{
public static void UpdateControl(this Control control, MethodInvoker code)
{
if (control.InvokeRequired) {
control.Invoke(code);
}
else{
code.Invoke();
}
}
using 'Control' type param in Extension mentod give us an advantage to call UpdateControl on any control.
for eg:- In the below example I have called 'UpdateControl' extension method on textbox control.
private void btnUpdate_Click(object sender, EventArgs e)
{
Thread th = new Thread(new ThreadStart( () => txtInfo.UpdateControl(Display) ) );
th.Start();
}
private void Display()
{
txtInfo.Text += "Updated";
}
Saturday, 13 June 2009
Using Web Services with MATLAB
This video explains how to consume Web services in matlab.
Note:- use 'createClassFromWsdl' function to generate matlab equivalent proxy class from wsdl.
Code snippet of Currency converter GUI application that is used for this demo,
file name :- CurrencyConverterGUI.m
------------------------------------
function varargout = CurrencyConverterGUI(varargin)
% CURRENCYCONVERTERGUI M-file for CurrencyConverterGUI.fig
% CURRENCYCONVERTERGUI, by itself, creates a new CURRENCYCONVERTERGUI or raises the existing
% singleton*.
%
% H = CURRENCYCONVERTERGUI returns the handle to a new CURRENCYCONVERTERGUI or the handle to
% the existing singleton*.
%
% CURRENCYCONVERTERGUI('CALLBACK',hObject,eventData,handles,...) calls the local
% function named CALLBACK in CURRENCYCONVERTERGUI.M with the given input arguments.
%
% CURRENCYCONVERTERGUI('Property','Value',...) creates a new CURRENCYCONVERTERGUI or raises the
% existing singleton*. Starting from the left, property value pairs are
% applied to the GUI before CurrencyConverterGUI_OpeningFunction gets called. An
% unrecognized property name or invalid value makes property application
% stop. All inputs are passed to CurrencyConverterGUI_OpeningFcn via varargin.
%
% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one
% instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES
% Edit the above text to modify the response to help CurrencyConverterGUI
% Last Modified by GUIDE v2.5 13-Jun-2009 08:58:28
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @CurrencyConverterGUI_OpeningFcn, ...
'gui_OutputFcn', @CurrencyConverterGUI_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT
% --- Executes just before CurrencyConverterGUI is made visible.
function CurrencyConverterGUI_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% varargin command line arguments to CurrencyConverterGUI (see VARARGIN)
% Choose default command line output for CurrencyConverterGUI
handles.output = hObject;
% Update handles structure
guidata(hObject, handles);
% UIWAIT makes CurrencyConverterGUI wait for user response (see UIRESUME)
% uiwait(handles.figure1);
% --- Outputs from this function are returned to the command line.
function varargout = CurrencyConverterGUI_OutputFcn(hObject, eventdata, handles)
% varargout cell array for returning output args (see VARARGOUT);
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Get default command line output from handles structure
varargout{1} = handles.output;
% --- Executes on selection change in popupmenu1.
function popupmenu1_Callback(hObject, eventdata, handles)
% hObject handle to popupmenu1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: contents = get(hObject,'String') returns popupmenu1 contents as cell array
% contents{get(hObject,'Value')} returns selected item from popupmenu1
% --- Executes during object creation, after setting all properties.
function popupmenu1_CreateFcn(hObject, eventdata, handles)
% hObject handle to popupmenu1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: popupmenu controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
% --- Executes on selection change in ToCurrency.
function ToCurrency_Callback(hObject, eventdata, handles)
% hObject handle to ToCurrency (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: contents = get(hObject,'String') returns ToCurrency contents as cell array
% contents{get(hObject,'Value')} returns selected item from ToCurrency
% --- Executes during object creation, after setting all properties.
function ToCurrency_CreateFcn(hObject, eventdata, handles)
% hObject handle to ToCurrency (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: popupmenu controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
% --- Executes on selection change in FromCurrency.
function FromCurrency_Callback(hObject, eventdata, handles)
% hObject handle to FromCurrency (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: contents = get(hObject,'String') returns FromCurrency contents as cell array
% contents{get(hObject,'Value')} returns selected item from FromCurrency
% --- Executes during object creation, after setting all properties.
function FromCurrency_CreateFcn(hObject, eventdata, handles)
% hObject handle to FromCurrency (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: popupmenu controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
function convertedValue_Callback(hObject, eventdata, handles)
% hObject handle to convertedValue (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of convertedValue as text
% str2double(get(hObject,'String')) returns contents of convertedValue as a double
% --- Executes during object creation, after setting all properties.
function convertedValue_CreateFcn(hObject, eventdata, handles)
% hObject handle to convertedValue (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
% --- Executes on button press in Convert.
function Convert_Callback(hObject, eventdata, handles)
% hObject handle to Convert (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
%instantiate object
service = CurrencyConvertor;
fromCurrency = getSelectedValueFromPopupMenu(handles.FromCurrency);
toCurrency = getSelectedValueFromPopupMenu(handles.ToCurrency);
value = ConversionRate(service, fromCurrency,toCurrency);
set(handles.convertedValue,'String',value);
function [selectedValue] = getSelectedValueFromPopupMenu(handle)
contents = get(handle,'String');
selectedValue = contents{ get(handle,'value') };
Note:- use 'createClassFromWsdl' function to generate matlab equivalent proxy class from wsdl.
Code snippet of Currency converter GUI application that is used for this demo,
file name :- CurrencyConverterGUI.m
------------------------------------
function varargout = CurrencyConverterGUI(varargin)
% CURRENCYCONVERTERGUI M-file for CurrencyConverterGUI.fig
% CURRENCYCONVERTERGUI, by itself, creates a new CURRENCYCONVERTERGUI or raises the existing
% singleton*.
%
% H = CURRENCYCONVERTERGUI returns the handle to a new CURRENCYCONVERTERGUI or the handle to
% the existing singleton*.
%
% CURRENCYCONVERTERGUI('CALLBACK',hObject,eventData,handles,...) calls the local
% function named CALLBACK in CURRENCYCONVERTERGUI.M with the given input arguments.
%
% CURRENCYCONVERTERGUI('Property','Value',...) creates a new CURRENCYCONVERTERGUI or raises the
% existing singleton*. Starting from the left, property value pairs are
% applied to the GUI before CurrencyConverterGUI_OpeningFunction gets called. An
% unrecognized property name or invalid value makes property application
% stop. All inputs are passed to CurrencyConverterGUI_OpeningFcn via varargin.
%
% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one
% instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES
% Edit the above text to modify the response to help CurrencyConverterGUI
% Last Modified by GUIDE v2.5 13-Jun-2009 08:58:28
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @CurrencyConverterGUI_OpeningFcn, ...
'gui_OutputFcn', @CurrencyConverterGUI_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT
% --- Executes just before CurrencyConverterGUI is made visible.
function CurrencyConverterGUI_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% varargin command line arguments to CurrencyConverterGUI (see VARARGIN)
% Choose default command line output for CurrencyConverterGUI
handles.output = hObject;
% Update handles structure
guidata(hObject, handles);
% UIWAIT makes CurrencyConverterGUI wait for user response (see UIRESUME)
% uiwait(handles.figure1);
% --- Outputs from this function are returned to the command line.
function varargout = CurrencyConverterGUI_OutputFcn(hObject, eventdata, handles)
% varargout cell array for returning output args (see VARARGOUT);
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Get default command line output from handles structure
varargout{1} = handles.output;
% --- Executes on selection change in popupmenu1.
function popupmenu1_Callback(hObject, eventdata, handles)
% hObject handle to popupmenu1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: contents = get(hObject,'String') returns popupmenu1 contents as cell array
% contents{get(hObject,'Value')} returns selected item from popupmenu1
% --- Executes during object creation, after setting all properties.
function popupmenu1_CreateFcn(hObject, eventdata, handles)
% hObject handle to popupmenu1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: popupmenu controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
% --- Executes on selection change in ToCurrency.
function ToCurrency_Callback(hObject, eventdata, handles)
% hObject handle to ToCurrency (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: contents = get(hObject,'String') returns ToCurrency contents as cell array
% contents{get(hObject,'Value')} returns selected item from ToCurrency
% --- Executes during object creation, after setting all properties.
function ToCurrency_CreateFcn(hObject, eventdata, handles)
% hObject handle to ToCurrency (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: popupmenu controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
% --- Executes on selection change in FromCurrency.
function FromCurrency_Callback(hObject, eventdata, handles)
% hObject handle to FromCurrency (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: contents = get(hObject,'String') returns FromCurrency contents as cell array
% contents{get(hObject,'Value')} returns selected item from FromCurrency
% --- Executes during object creation, after setting all properties.
function FromCurrency_CreateFcn(hObject, eventdata, handles)
% hObject handle to FromCurrency (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: popupmenu controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
function convertedValue_Callback(hObject, eventdata, handles)
% hObject handle to convertedValue (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of convertedValue as text
% str2double(get(hObject,'String')) returns contents of convertedValue as a double
% --- Executes during object creation, after setting all properties.
function convertedValue_CreateFcn(hObject, eventdata, handles)
% hObject handle to convertedValue (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
% --- Executes on button press in Convert.
function Convert_Callback(hObject, eventdata, handles)
% hObject handle to Convert (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
%instantiate object
service = CurrencyConvertor;
fromCurrency = getSelectedValueFromPopupMenu(handles.FromCurrency);
toCurrency = getSelectedValueFromPopupMenu(handles.ToCurrency);
value = ConversionRate(service, fromCurrency,toCurrency);
set(handles.convertedValue,'String',value);
function [selectedValue] = getSelectedValueFromPopupMenu(handle)
contents = get(handle,'String');
selectedValue = contents{ get(handle,'value') };
Friday, 29 May 2009
Creating GUI applications with Matlab.
Quick start to matlab gui programming using 'guide'.
Note:- It is easy to convert matlab GUI applications to windows standalone executable and run the converted executable (.exe file) in any machine in which matlab is not installed.For details check 'deploytool' matlab documentation.
Note:- It is easy to convert matlab GUI applications to windows standalone executable and run the converted executable (.exe file) in any machine in which matlab is not installed.For details check 'deploytool' matlab documentation.
Monday, 18 May 2009
F# - New language for scientific computing From Microsoft.
Last Saturday I have got opportunity (or time :-)) to watch a screencast by Luca Bolognese on Functional language F# from MS.Watch the videohere.
My first impression on F# is that difficult syntax as compared to matlab but I believe there will be lot more language enhancements in coming release. Huge promise for Quant. Finance applications as we can easily integrate F# libs with other dotnet languages.
You can download F# September 2008 CTP from here
I will try to update my blog with some Quant. Libs written in F#.
My first impression on F# is that difficult syntax as compared to matlab but I believe there will be lot more language enhancements in coming release. Huge promise for Quant. Finance applications as we can easily integrate F# libs with other dotnet languages.
You can download F# September 2008 CTP from here
I will try to update my blog with some Quant. Libs written in F#.
Monday, 4 May 2009
Matlab Neural Network in C# Application
Part 1 gives an overview of Matlab Network manager . This screen cast shows how to create XOR network using Matlab Network Manager.
This part explains how to use Matlab Neural Network in c# windows application and limitation of Matlab complier with respect to 'sim' function.
Note:- Don't forget to watch next episode of this series, in which I have explained how to get around with 'sim' function compiler limitation and call Neural network from c# windows application
In this part I have explained how to get around with 'sim' function compiler limitation and call Neural network from c# windows application.
This part explains how to use Matlab Neural Network in c# windows application and limitation of Matlab complier with respect to 'sim' function.
Note:- Don't forget to watch next episode of this series, in which I have explained how to get around with 'sim' function compiler limitation and call Neural network from c# windows application
In this part I have explained how to get around with 'sim' function compiler limitation and call Neural network from c# windows application.
Thursday, 9 April 2009
Multi-Threading (.Net) :- System.Timer.Time class
Dotnet provides a server-based timer ( and is different from System.Windows.Forms.Timer and System.Threading.Timer ), allow us to specify a recurring interval at which an event will be raised in our application(or Easy way of executing a task at specified interval).
Below example (c# console application) shows how to create a Timer ,execute a task at specified interval and how to stop Timer gracefully.
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;
using System.Timers;
namespace BackgroundThread_Terminate
{
class Program
{
static void Main(string[] args)
{
using (TimerClass_example1 timerSample = new TimerClass_example1())
{
Console.ReadLine();
}
Console.ReadLine();
}
}
public class TimerClass_example1:IDisposable
{
System.Timers.Timer timer;
long _stopTimer = 0; // 0 for start , 1 for stop
ManualResetEvent manualReset = new ManualResetEvent(false);
public TimerClass_example1()
{
timer = new System.Timers.Timer(1000);
timer.Elapsed += new ElapsedEventHandler(timer_Elapsed);
timer.Start();
}
//call back function excuted on a threadpool thread.
void timer_Elapsed(object sender, ElapsedEventArgs e)
{
//always use try catch in callback
try
{
//gracefully stop timer
if(Interlocked.Read(ref _stopTimer) == 1 )
{
timer.Stop();
//signal the thread which is waiting.
manualReset.Set();
return;
}
Console.WriteLine(string.Format("Executed callback at {0}. Threadpool Thread ID:- {1}", DateTime.Now.ToString(), Thread.CurrentThread.ManagedThreadId));
//Note #1:- Uncomment below the and note the ThreadID's printed
//Thread.Sleep(2000); //[ Reason for printing different Thread is :- The Elapsed event is raised on a ThreadPool thread. If processing of the Elapsed event lasts longer than Interval, the event might be raised again on another ThreadPool thread. Thus, the event handler should be reentrant.]
}
catch (Exception ex)
{
//log exception and you can stop excuting Timer.
}
}
public void Dispose()
{
StopAndDisposeTimer();
GC.SuppressFinalize(this);
Console.WriteLine("Timer has been disposed");
}
private void StopAndDisposeTimer()
{
Interlocked.Exchange(ref _stopTimer, 1);
//wait 5 secs for signal
if (!manualReset.WaitOne(5000, false))
{
Console.WriteLine("Timer is not stopped gracefully.");
}
timer.Dispose();
}
~TimerClass_example1()
{
Dispose();
}
}
}
Below example (c# console application) shows how to create a Timer ,execute a task at specified interval and how to stop Timer gracefully.
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;
using System.Timers;
namespace BackgroundThread_Terminate
{
class Program
{
static void Main(string[] args)
{
using (TimerClass_example1 timerSample = new TimerClass_example1())
{
Console.ReadLine();
}
Console.ReadLine();
}
}
public class TimerClass_example1:IDisposable
{
System.Timers.Timer timer;
long _stopTimer = 0; // 0 for start , 1 for stop
ManualResetEvent manualReset = new ManualResetEvent(false);
public TimerClass_example1()
{
timer = new System.Timers.Timer(1000);
timer.Elapsed += new ElapsedEventHandler(timer_Elapsed);
timer.Start();
}
//call back function excuted on a threadpool thread.
void timer_Elapsed(object sender, ElapsedEventArgs e)
{
//always use try catch in callback
try
{
//gracefully stop timer
if(Interlocked.Read(ref _stopTimer) == 1 )
{
timer.Stop();
//signal the thread which is waiting.
manualReset.Set();
return;
}
Console.WriteLine(string.Format("Executed callback at {0}. Threadpool Thread ID:- {1}", DateTime.Now.ToString(), Thread.CurrentThread.ManagedThreadId));
//Note #1:- Uncomment below the and note the ThreadID's printed
//Thread.Sleep(2000); //[ Reason for printing different Thread is :- The Elapsed event is raised on a ThreadPool thread. If processing of the Elapsed event lasts longer than Interval, the event might be raised again on another ThreadPool thread. Thus, the event handler should be reentrant.]
}
catch (Exception ex)
{
//log exception and you can stop excuting Timer.
}
}
public void Dispose()
{
StopAndDisposeTimer();
GC.SuppressFinalize(this);
Console.WriteLine("Timer has been disposed");
}
private void StopAndDisposeTimer()
{
Interlocked.Exchange(ref _stopTimer, 1);
//wait 5 secs for signal
if (!manualReset.WaitOne(5000, false))
{
Console.WriteLine("Timer is not stopped gracefully.");
}
timer.Dispose();
}
~TimerClass_example1()
{
Dispose();
}
}
}
Subscribe to:
Posts (Atom)