jwcolby
jwcolby at colbyconsulting.com
Sun Nov 29 22:09:43 CST 2009
Shamil, Thanks for this. I will need to study it. John W. Colby www.ColbyConsulting.com Shamil Salakhetdinov wrote: > Hi John, > > Here is one of the methods I use (there are zillion combinations) - I dunno > where it comes from, did I borrowed it from somewhere or I got it elaborated > myself, is it recommended way or not - but it just works, and I have > "cooked" it for you here from scratch - this is codebehind for Windows Form > named Form1: > > using System; > using System.Windows.Forms; > > namespace WinFormsSample > { > public partial class Form1 : Form > { > // Create Windows Form Form1 with three controls: > // > // 1. Button: cmdTest1 -> cmdTest1_Click > // 2. Button: cmdTest2 -> cmdTest2_Click > // 3. TextBox: txtLog (Multiline = true) > > #region Test class > public class Test > { > public delegate void ProgressStatus(string message); > > private static int _id; > private System.Threading.Thread _thread; > public void Run(ProgressStatus progressStatus) > { > _testId = ++_id; > _progressStatus = progressStatus; > > System.Threading.ThreadStart ts = > new System.Threading.ThreadStart(runThread); > _thread = new System.Threading.Thread(ts); > _thread.IsBackground = true; > _thread.Start(); > } > > private int _testId; > private ProgressStatus _progressStatus; > private void runThread() > { > for (int i = 1; i < 10; i++) > { > _progressStatus(string.Format("Test#{0}, cycle#{1}", > _testId, i)); > System.Threading.Thread.Sleep(500); > } > } > } > #endregion // Test class > > public Form1() > { > InitializeComponent(); > } > > private Test _test1; > private void cmdTest1_Click(object sender, EventArgs e) > { > _test1 = new Test(); > _test1.Run(progressStatus); > } > > private Test _test2; > private void cmdTest2_Click(object sender, EventArgs e) > { > _test2 = new Test(); > _test2.Run(progressStatus); > } > > private void progressStatus(string message) > { > if (this.InvokeRequired) > { > object[] args = { message }; > this.Invoke( > new Test.ProgressStatus( > progressStatusInThisFormThread), > args); > } > else > progressStatusInThisFormThread(message); > > } > > private static object _statusMessageOutputLocker = new object(); > private void progressStatusInThisFormThread(string message) > { > lock (_statusMessageOutputLocker) > { > txtLog.Text = > String.Format("{0:hh:mm:ss.fff}: {1}", > DateTime.Now, > message) + > System.Environment.NewLine + > txtLog.Text; > } > } > } > } > > I will try to post about another one I use in the coming days... > > Thank you. > > -- > Shamil > > -----Original Message----- > So how do you folks display status information in a form?