<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://rayharwood.com/Wiki/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://rayharwood.com/Wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=68.98.32.163&amp;*</id>
		<title>RayHarwood - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="http://rayharwood.com/Wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=68.98.32.163&amp;*"/>
		<link rel="alternate" type="text/html" href="http://rayharwood.com/Wiki/index.php?title=Special:Contributions/68.98.32.163"/>
		<updated>2026-11-06T07:24:40Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.20.3</generator>

	<entry>
		<id>http://rayharwood.com/Wiki/index.php?title=Xamarin</id>
		<title>Xamarin</title>
		<link rel="alternate" type="text/html" href="http://rayharwood.com/Wiki/index.php?title=Xamarin"/>
				<updated>2016-05-23T02:49:08Z</updated>
		
		<summary type="html">&lt;p&gt;68.98.32.163: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Best overview video ever: [https://developer.xamarin.com/videos/?v=Introduction_to_Xamarin.Forms Intro to Xamarin.Forms]&lt;br /&gt;
&lt;br /&gt;
Azure Mobile Sevices: [https://developer.xamarin.com/videos/?v=Azure_Mobile_Services_and_Xamarin Overview]&lt;/div&gt;</summary>
		<author><name>68.98.32.163</name></author>	</entry>

	<entry>
		<id>http://rayharwood.com/Wiki/index.php?title=Marshalling_updates_to_a_text_box</id>
		<title>Marshalling updates to a text box</title>
		<link rel="alternate" type="text/html" href="http://rayharwood.com/Wiki/index.php?title=Marshalling_updates_to_a_text_box"/>
				<updated>2016-04-29T15:09:30Z</updated>
		
		<summary type="html">&lt;p&gt;68.98.32.163: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;When you have a text box on a form, it's typically created as part of the form's initialization code, in the main thread.  If you have a background thread that needs to update the text box, you can't just &amp;quot;pass the text box into the thread&amp;quot;, nor can you even respond to an Event in the thread with a handler and &amp;quot;just update the text box&amp;quot; (the event handler runs in the thread of the event).&lt;br /&gt;
&lt;br /&gt;
The code isn't difficult to write, but it is ''complex'', in that it's not intuitive nor easy to simply type out when you need it.&lt;br /&gt;
&lt;br /&gt;
    Delegate Sub AddLogtext_Callback(TB As TextBox, Text As String)&lt;br /&gt;
    '&lt;br /&gt;
    Private MyTB As TextBox = Nothing&lt;br /&gt;
    '&lt;br /&gt;
    Sub AddLogText_Invoke(TB As TextBox, Text As String)&lt;br /&gt;
        If TB.InvokeRequired Then&lt;br /&gt;
            Dim AddLogText_Delegate As New AddLogtext_Callback(AddressOf AddLogText_Invoke)&lt;br /&gt;
            MyTB = TB&lt;br /&gt;
            Dim ParmArray() As Object = {MyTB, Text}&lt;br /&gt;
            MyTB.Invoke(AddLogText_Delegate, ParmArray)&lt;br /&gt;
        Else&lt;br /&gt;
            tbInfo.Text &amp;amp;= Format(Now, &amp;quot;hh:mm:ss tt&amp;quot;) &amp;amp; &amp;quot; &amp;quot; &amp;amp; Text &amp;amp; vbCrLf&lt;br /&gt;
            tbInfo.Select(tbInfo.TextLength, 1)&lt;br /&gt;
            tbInfo.ScrollToCaret()&lt;br /&gt;
            Application.DoEvents()&lt;br /&gt;
        End If&lt;br /&gt;
    End Sub&lt;br /&gt;
    '&lt;br /&gt;
    Sub LogInfo(Text As String)&lt;br /&gt;
        _TextIsDirty = True&lt;br /&gt;
        AddLogText_Invoke(tbInfo, Text)&lt;br /&gt;
    End Sub&lt;br /&gt;
&lt;br /&gt;
'''NOTE: The code below isn't right either! Be sure to model after the above code'''&lt;br /&gt;
&lt;br /&gt;
    Private Delegate Sub ShowText(Text As String)&lt;br /&gt;
    '&lt;br /&gt;
    Sub ShowText_Invoke(Text As String)&lt;br /&gt;
        If tbActionLog.InvokeRequired Then&lt;br /&gt;
            Dim SHowText_Delegate As New ShowText(AddressOf ShowText_Invoke)&lt;br /&gt;
            SHowText_Delegate(Text)&lt;br /&gt;
        Else&lt;br /&gt;
            tbActionLog.Text &amp;amp;= Format(Now, &amp;quot;hh:mm:ss tt&amp;quot;) &amp;amp; &amp;quot; &amp;quot; &amp;amp; Text &amp;amp; vbCrLf&lt;br /&gt;
            tbActionLog.Select(tbActionLog.TextLength, 1)&lt;br /&gt;
            tbActionLog.ScrollToCaret()&lt;br /&gt;
            Application.DoEvents()&lt;br /&gt;
        End If&lt;br /&gt;
    End Sub&lt;/div&gt;</summary>
		<author><name>68.98.32.163</name></author>	</entry>

	<entry>
		<id>http://rayharwood.com/Wiki/index.php?title=Marshalling_updates_to_a_text_box</id>
		<title>Marshalling updates to a text box</title>
		<link rel="alternate" type="text/html" href="http://rayharwood.com/Wiki/index.php?title=Marshalling_updates_to_a_text_box"/>
				<updated>2016-04-29T15:06:40Z</updated>
		
		<summary type="html">&lt;p&gt;68.98.32.163: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;When you have a text box on a form, it's typically created as part of the form's initialization code, in the main thread.  If you have a background thread that needs to update the text box, you can't just &amp;quot;pass the text box into the thread&amp;quot;, nor can you even respond to an Event in the thread with a handler and &amp;quot;just update the text box&amp;quot; (the event handler runs in the thread of the event).&lt;br /&gt;
&lt;br /&gt;
The code isn't difficult to write, but it is ''complex'', in that it's not intuitive nor easy to simply type out when you need it.&lt;br /&gt;
&lt;br /&gt;
'''NOTE: This code isn't right either!'''&lt;br /&gt;
&lt;br /&gt;
    Private Delegate Sub ShowText(Text As String)&lt;br /&gt;
    '&lt;br /&gt;
    Sub ShowText_Invoke(Text As String)&lt;br /&gt;
        If tbActionLog.InvokeRequired Then&lt;br /&gt;
            Dim SHowText_Delegate As New ShowText(AddressOf ShowText_Invoke)&lt;br /&gt;
            SHowText_Delegate(Text)&lt;br /&gt;
        Else&lt;br /&gt;
            tbActionLog.Text &amp;amp;= Format(Now, &amp;quot;hh:mm:ss tt&amp;quot;) &amp;amp; &amp;quot; &amp;quot; &amp;amp; Text &amp;amp; vbCrLf&lt;br /&gt;
            tbActionLog.Select(tbActionLog.TextLength, 1)&lt;br /&gt;
            tbActionLog.ScrollToCaret()&lt;br /&gt;
            Application.DoEvents()&lt;br /&gt;
        End If&lt;br /&gt;
    End Sub&lt;/div&gt;</summary>
		<author><name>68.98.32.163</name></author>	</entry>

	</feed>