数据库连接期间的UI锁定

sw2*_*020 1 c# wpf

当我尝试连接到一个不存在的实例时,UI在我的应用程序中锁定我尝试使用新线程,但这似乎不起作用

//从主类打电话

 Dispatcher.BeginInvoke(new Action(
 () => Timedtask(instance, database)));    

 //Method

  public void Timedtask(string instance, string database)
        { 
            Timer.Start();
            Timer.Tick += delegate
            {
                if (!TimedTask.timer_Tick(instance, database))
                {
                    Dispatcher.CurrentDispatcher.Invoke(Stopped);
                }
            };

        }   

    // Try an open connection

         using (var con1 = new SqlConnection
                {
                    ConnectionString = @"Data Source=" + instanceName1 + ";Integrated Security=SSPI;" +
                 "MultipleActiveResultSets=true;"
                })


                {

                //more code
                 con1.Open();               
                //more code
                }
Run Code Online (Sandbox Code Playgroud)

Roh*_*ats 8

Dispatcher.BeginInvoke将回调放回UI线程而不是后台线程.因此,您的所有操作都在UI线程上运行.因此锁定你的用户界面.

使用Task或BackgroundWorker委托后台线程调用.请注意,任何GUI组件都无法从后台线程进行修改,因此您需要使用Dispatcher.Invoke或者在UI线程上对其进行编组Dispatcher.BeginInvoke.


Task.Factory.StartNew(() => { Timedtask(instance, database) });
Run Code Online (Sandbox Code Playgroud)

要么

如果使用.Net 3.5,则可以使用backgroundWorker:

BackgroundWorker worker = new BackgroundWorker();
worker.DoWork += (s, e) => { Timedtask(instance, database); };
worker.RunWorkerAsync();
Run Code Online (Sandbox Code Playgroud)