<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; color: rgb(0, 0, 0); font-size: 14px; font-family: Calibri, sans-serif;">
<div>We have some code which works on Microsoft’s runtime and used to work on Mono 3.12, but now fails on Mono 4.2. Simplified code to reproduce the issue is as follows:</div>
<div><br>
</div>
<div>
<div>public class WorkStateThread</div>
<div>{</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>public void Start()</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>{</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>m_thread = new Thread(ThreadProc);</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>m_thread.Start(Thread.CurrentThread);</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>m_thread.Join();</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>}</div>
<div><br>
</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>private void ThreadProc (object objData)</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>{</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>if (m_thread != Thread.CurrentThread)</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>throw new InvalidOperationException ("m_thread != Thread.CurrentThread");</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>}</div>
<div><br>
</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>Thread m_thread;</div>
<div>}</div>
<div><br>
</div>
<div>class MainClass</div>
<div>{</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>public static void Main (string[] args)</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>{</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>WorkStateThread ws = new WorkStateThread ();</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>ws.Start ();</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>Console.WriteLine ("Done");</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>}</div>
<div>}</div>
</div>
<div><br>
</div>
<div>
<div>[TestFixture]</div>
<div>public class Test</div>
<div>{</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>[Test]</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>public void TestCase ()</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>{</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>WorkStateThread ws = new WorkStateThread ();</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>ws.Start ();</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>}</div>
<div>}</div>
</div>
<div><br>
</div>
<div>This code runs as expected when run from the command line, but if run as part of a unit test using NUnit, the InvalidOperationException is thrown.</div>
<div><br>
</div>
<div>— Martin</div>
</body>
</html>