黄学彪
2020-12-16 0d9f64668fd7350d6a21fd157e32009a96d98134
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
using System;
using System.Collections.Generic;
using System.Text;
 
namespace Shared.Phone
{
    /// <summary>
    /// 线程逻辑(创建这个东西,是为了Log出力)
    /// </summary>
    public class HdlThreadLogic
    {
        #region ■ 变量声明___________________________
 
        /// <summary>
        /// 线程逻辑(创建这个东西,是为了Log出力)
        /// </summary>
        private static HdlThreadLogic m_Current = null;
        /// <summary>
        /// 线程逻辑(创建这个东西,是为了Log出力)
        /// </summary>
        public static HdlThreadLogic Current
        {
            get
            {
                if (m_Current == null)
                {
                    m_Current = new HdlThreadLogic();
                }
                return m_Current;
            }
        }
        #endregion
 
        #region ■ 线程执行___________________________
 
        /// <summary>
        /// 子线程执行(创建这个东西,是为了Log出力)
        /// </summary>
        public void RunThread(Action action, ShowErrorMode mode = ShowErrorMode.YES)
        {
            new System.Threading.Thread(() =>
            {
                //记录起当前界面,虽然似乎没啥用
                string nowFormId = HdlFormLogic.Current.NowActionFormID;
                try
                {
                    action.Invoke();
                    action = null;
                }
                catch (Exception ex)
                {
                    if (mode == ShowErrorMode.YES)
                    {
                        Application.RunOnMainThread(() =>
                        {
                            //出现未知错误,数据丢失
                            var alert = new ShowMsgControl(ShowMsgType.Error, Language.StringByID(R.MyInternationalizationString.uUnKnownError));
                            alert.Show();
                            //出现异常,则关闭进度条
                            ProgressBar.Close();
                        });
                    }
                    //Log出力
                    string msg = "当前激活的界面[" + nowFormId + "]";
                    HdlLogLogic.Current.WriteLog(ex, msg);
                }
            })
            { IsBackground = true }.Start();
        }
 
        /// <summary>
        /// 执行运行子线程里面的主线程(创建这个东西,是为了Log出力)
        /// </summary>
        public void RunMainInThread(Action action, ShowErrorMode mode = ShowErrorMode.YES)
        {
            new System.Threading.Thread(() =>
            {
                Application.RunOnMainThread(() =>
                {
                    //记录起当前界面,虽然似乎没啥用
                    string nowFormId = HdlFormLogic.Current.NowActionFormID;
                    try
                    {
                        action.Invoke();
                        action = null;
                    }
                    catch (Exception ex)
                    {
                        if (mode == ShowErrorMode.YES)
                        {
                            //出现未知错误,数据丢失
                            var alert = new ShowMsgControl(ShowMsgType.Error, Language.StringByID(R.MyInternationalizationString.uUnKnownError));
                            alert.Show();
                        }
                        //Log出力
                        string msg = "当前激活的界面[" + nowFormId + "]";
                        HdlLogLogic.Current.WriteLog(ex, msg);
                        //出现异常,则关闭进度条
                        ProgressBar.Close();
                    }
                });
                
            })
            { IsBackground = true }.Start();
        }
 
        /// <summary>
        /// 执行运行于主线程(创建这个东西,是为了Log出力)
        /// </summary>
        public void RunMain(Action action, ShowErrorMode mode = ShowErrorMode.YES)
        {
            Application.RunOnMainThread(() =>
            {
                //记录起当前界面,虽然似乎没啥用
                string nowFormId = HdlFormLogic.Current.NowActionFormID;
                try
                {
                    action.Invoke();
                    action = null;
                }
                catch (Exception ex)
                {
                    if (mode == ShowErrorMode.YES)
                    {
                        //出现未知错误,数据丢失
                        var alert = new ShowMsgControl(ShowMsgType.Error, Language.StringByID(R.MyInternationalizationString.uUnKnownError));
                        alert.Show();
                    }
 
                    //Log出力
                    string msg = "当前激活的界面[" + nowFormId + "]";
                    HdlLogLogic.Current.WriteLog(ex, msg);
                    //出现异常,则关闭进度条
                    ProgressBar.Close();
                }
            });
        }
 
        #endregion
    }
}