Skip to main content

The calling thread must be STA, because many UI components require this.

Using Thread:

  // Create a thread  
       Thread newWindowThread = new Thread(new ThreadStart(() =>  
       {  
         // You can use your code  
         // Create and show the Window  
         FaxImageLoad obj = new FaxImageLoad(destination);  
         obj.Show();  
         // Start the Dispatcher Processing  
         System.Windows.Threading.Dispatcher.Run();  
       }));  
       // Set the apartment state  
       newWindowThread.SetApartmentState(ApartmentState.STA);  
       // Make the thread a background thread  
       newWindowThread.IsBackground = true;  
       // Start the thread  
       newWindowThread.Start();  


Using Task and Thread:



 // Creating Task Pool, Each task will work asyn and as an indivisual thread component  
       Task[] tasks = new Task[3];  
       // Control drug data disc UI load optimize   
       tasks[0] = Task.Run(() =>  
       {  
         //This will handle the ui thread :The calling thread must be STA, because many UI components require this  
         TaskCompletionSource<object> source = new TaskCompletionSource<object>();  
         Thread thread = new Thread(() =>  
         {  
           try  
           {  
             GlobalVar.DrugCtrlDataDiskAsapVW = new DrugCtrlDataDiskAsap(string.Empty);  
             source.SetResult(null);  
           }  
           catch (Exception ex)  
           {  
             source.SetException(ex);  
           }  
         });  
         thread.SetApartmentState(ApartmentState.STA);  
         thread.IsBackground = true;  
         thread.Start();  
         return source.Task;  
       });  
       // Optimize report load for first time loading  
       tasks[1] = Task.Run(() =>  
       {  
         //This will handle the ui thread :The calling thread must be STA, because many UI components require this  
         TaskCompletionSource<object> source = new TaskCompletionSource<object>();  
         Thread thread = new Thread(() =>  
         {  
           try  
           {  
             VMPrintRxLabel printRxLabel = new VMPrintRxLabel();  
             printRxLabel.DummyReport();  
             source.SetResult(null);  
           }  
           catch (Exception ex)  
           {  
             source.SetException(ex);  
           }  
         });  
         thread.SetApartmentState(ApartmentState.STA);  
         thread.IsBackground = true;  
         thread.Start();  
         return source.Task;  
       });  



Comments

Popular posts from this blog

C# run powershell script as administrator

Recently I was fetching a problem that I need to run a PowerShell script that will change TFS user Display name and SID. I was trying to run that script from C# that was not working due to TFS security update and TLS certificate. Using this code block I resolve the Issue. var newProcessInfo = new System.Diagnostics.ProcessStartInfo(); newProcessInfo.FileName = @"C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe"; newProcessInfo.Verb = "runas"; // Define Run as administrator newProcessInfo.Arguments = script; //Define your powershell script newProcessInfo.UseShellExecute = false; newProcessInfo.RedirectStandardOutput = true; // This will enable to read Powershell run output newProcessInfo.RedirectStandardError = true; Process proces = System.Diagnostics.Process.Start(newProcessInfo); proces.WaitForExit(); // I want to read the output string from powershell window StringBuilder output = new StringBuilder(); output.Append("Started"); while (!proces.St

mvc razor textboxfor change event change another textboxfor value

Based on value of Weight, Rate , CNF & AWB it will change the value of Freight , TTLCNF anfd TTLFright . Freight= Weight*Rate; TTLCNF  = Weight*CNF; TTLFright=  Freight+ TTLCNF  + AWB; @Html.TextBoxFor(model => model.Weight, new { onChange="return GetWight(this);"}) @Html.TextBoxFor(model => model.Rate, new { onChange="return GetWight(this);"})/Kg @Html.TextBoxFor(model => model.Freight, new {disabled = "disabled" , @readonly = "readonly" ,onChange="return GetTTLFright(this);"}) @Html.TextBoxFor(model => model.CNFPK, new { onChange="return GetCNFPK(this);"}) @Html.TextBoxFor(model => model.TTLCNF, new {disabled = "disabled" , @readonly = "readonly",onChange="return GetTTLFright(this);" }) @Html.TextBoxFor(model => model.AWB, new { onChange="return GetTTLFright(this);"}) and script <script> function GetW

ASP.NET MVC razor SAP Crystal report

Crete a new project: Add a aspx Master Page Create a new folder Reports and 2 sub folder crystal & crystalviewer Now add a web form page in crystalviewer  folder. Add the master page namespace in your web form page. MasterPageFile ="~/Views/Shared/ReportSite.Master" Replace your web form by this code < asp : Content ID ="Content1" ContentPlaceHolderID ="ContentPlaceHolder1" runat ="server">      </ asp : Content > Now go to design mode of your web form drag & drop the crystal report viewer in your web form. After that your page will be look look like this. Replace the code: < CR : CrystalReportViewer ID ="EmployeeList" runat ="server"   HasCrystalLogo ="False"     AutoDataBind ="True"   Height ="50px"   EnableParameterPrompt ="false" EnableDatabaseLogonPrompt